5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
23 * Copyright (c) 2011, 2014 by Delphix. All rights reserved.
24 * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
25 */
26
27 #ifndef _SYS_SPA_H
28 #define _SYS_SPA_H
29
30 #include <sys/avl.h>
31 #include <sys/zfs_context.h>
32 #include <sys/nvpair.h>
33 #include <sys/sysmacros.h>
34 #include <sys/types.h>
35 #include <sys/fs/zfs.h>
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40
41 /*
42 * Forward references that lots of things need.
43 */
44 typedef struct spa spa_t;
665 extern void spa_config_load(void);
666 extern nvlist_t *spa_all_configs(uint64_t *);
667 extern void spa_config_set(spa_t *spa, nvlist_t *config);
668 extern nvlist_t *spa_config_generate(spa_t *spa, vdev_t *vd, uint64_t txg,
669 int getstats);
670 extern void spa_config_update(spa_t *spa, int what);
671
672 /*
673 * Miscellaneous SPA routines in spa_misc.c
674 */
675
676 /* Namespace manipulation */
677 extern spa_t *spa_lookup(const char *name);
678 extern spa_t *spa_add(const char *name, nvlist_t *config, const char *altroot);
679 extern void spa_remove(spa_t *spa);
680 extern spa_t *spa_next(spa_t *prev);
681
682 /* Refcount functions */
683 extern void spa_open_ref(spa_t *spa, void *tag);
684 extern void spa_close(spa_t *spa, void *tag);
685 extern boolean_t spa_refcount_zero(spa_t *spa);
686
687 #define SCL_NONE 0x00
688 #define SCL_CONFIG 0x01
689 #define SCL_STATE 0x02
690 #define SCL_L2ARC 0x04 /* hack until L2ARC 2.0 */
691 #define SCL_ALLOC 0x08
692 #define SCL_ZIO 0x10
693 #define SCL_FREE 0x20
694 #define SCL_VDEV 0x40
695 #define SCL_LOCKS 7
696 #define SCL_ALL ((1 << SCL_LOCKS) - 1)
697 #define SCL_STATE_ALL (SCL_STATE | SCL_L2ARC | SCL_ZIO)
698
699 /* Pool configuration locks */
700 extern int spa_config_tryenter(spa_t *spa, int locks, void *tag, krw_t rw);
701 extern void spa_config_enter(spa_t *spa, int locks, void *tag, krw_t rw);
702 extern void spa_config_exit(spa_t *spa, int locks, void *tag);
703 extern int spa_config_held(spa_t *spa, int locks, krw_t rw);
704
737 extern void spa_altroot(spa_t *, char *, size_t);
738 extern int spa_sync_pass(spa_t *spa);
739 extern char *spa_name(spa_t *spa);
740 extern uint64_t spa_guid(spa_t *spa);
741 extern uint64_t spa_load_guid(spa_t *spa);
742 extern uint64_t spa_last_synced_txg(spa_t *spa);
743 extern uint64_t spa_first_txg(spa_t *spa);
744 extern uint64_t spa_syncing_txg(spa_t *spa);
745 extern uint64_t spa_version(spa_t *spa);
746 extern pool_state_t spa_state(spa_t *spa);
747 extern spa_load_state_t spa_load_state(spa_t *spa);
748 extern uint64_t spa_freeze_txg(spa_t *spa);
749 extern uint64_t spa_get_asize(spa_t *spa, uint64_t lsize);
750 extern uint64_t spa_get_dspace(spa_t *spa);
751 extern uint64_t spa_get_slop_space(spa_t *spa);
752 extern void spa_update_dspace(spa_t *spa);
753 extern uint64_t spa_version(spa_t *spa);
754 extern boolean_t spa_deflate(spa_t *spa);
755 extern metaslab_class_t *spa_normal_class(spa_t *spa);
756 extern metaslab_class_t *spa_log_class(spa_t *spa);
757 extern int spa_max_replication(spa_t *spa);
758 extern int spa_prev_software_version(spa_t *spa);
759 extern int spa_busy(void);
760 extern uint8_t spa_get_failmode(spa_t *spa);
761 extern boolean_t spa_suspended(spa_t *spa);
762 extern uint64_t spa_bootfs(spa_t *spa);
763 extern uint64_t spa_delegation(spa_t *spa);
764 extern objset_t *spa_meta_objset(spa_t *spa);
765 extern uint64_t spa_deadman_synctime(spa_t *spa);
766
767 /* Miscellaneous support routines */
768 extern void spa_activate_mos_feature(spa_t *spa, const char *feature,
769 dmu_tx_t *tx);
770 extern void spa_deactivate_mos_feature(spa_t *spa, const char *feature);
771 extern int spa_rename(const char *oldname, const char *newname);
772 extern spa_t *spa_by_guid(uint64_t pool_guid, uint64_t device_guid);
773 extern boolean_t spa_guid_exists(uint64_t pool_guid, uint64_t device_guid);
774 extern char *spa_strdup(const char *);
775 extern void spa_strfree(char *);
776 extern uint64_t spa_get_random(uint64_t range);
|
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
23 * Copyright (c) 2011, 2014 by Delphix. All rights reserved.
24 * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
25 * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
26 */
27
28 #ifndef _SYS_SPA_H
29 #define _SYS_SPA_H
30
31 #include <sys/avl.h>
32 #include <sys/zfs_context.h>
33 #include <sys/nvpair.h>
34 #include <sys/sysmacros.h>
35 #include <sys/types.h>
36 #include <sys/fs/zfs.h>
37
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41
42 /*
43 * Forward references that lots of things need.
44 */
45 typedef struct spa spa_t;
666 extern void spa_config_load(void);
667 extern nvlist_t *spa_all_configs(uint64_t *);
668 extern void spa_config_set(spa_t *spa, nvlist_t *config);
669 extern nvlist_t *spa_config_generate(spa_t *spa, vdev_t *vd, uint64_t txg,
670 int getstats);
671 extern void spa_config_update(spa_t *spa, int what);
672
673 /*
674 * Miscellaneous SPA routines in spa_misc.c
675 */
676
677 /* Namespace manipulation */
678 extern spa_t *spa_lookup(const char *name);
679 extern spa_t *spa_add(const char *name, nvlist_t *config, const char *altroot);
680 extern void spa_remove(spa_t *spa);
681 extern spa_t *spa_next(spa_t *prev);
682
683 /* Refcount functions */
684 extern void spa_open_ref(spa_t *spa, void *tag);
685 extern void spa_close(spa_t *spa, void *tag);
686 extern void spa_async_close(spa_t *spa, void *tag);
687 extern boolean_t spa_refcount_zero(spa_t *spa);
688
689 #define SCL_NONE 0x00
690 #define SCL_CONFIG 0x01
691 #define SCL_STATE 0x02
692 #define SCL_L2ARC 0x04 /* hack until L2ARC 2.0 */
693 #define SCL_ALLOC 0x08
694 #define SCL_ZIO 0x10
695 #define SCL_FREE 0x20
696 #define SCL_VDEV 0x40
697 #define SCL_LOCKS 7
698 #define SCL_ALL ((1 << SCL_LOCKS) - 1)
699 #define SCL_STATE_ALL (SCL_STATE | SCL_L2ARC | SCL_ZIO)
700
701 /* Pool configuration locks */
702 extern int spa_config_tryenter(spa_t *spa, int locks, void *tag, krw_t rw);
703 extern void spa_config_enter(spa_t *spa, int locks, void *tag, krw_t rw);
704 extern void spa_config_exit(spa_t *spa, int locks, void *tag);
705 extern int spa_config_held(spa_t *spa, int locks, krw_t rw);
706
739 extern void spa_altroot(spa_t *, char *, size_t);
740 extern int spa_sync_pass(spa_t *spa);
741 extern char *spa_name(spa_t *spa);
742 extern uint64_t spa_guid(spa_t *spa);
743 extern uint64_t spa_load_guid(spa_t *spa);
744 extern uint64_t spa_last_synced_txg(spa_t *spa);
745 extern uint64_t spa_first_txg(spa_t *spa);
746 extern uint64_t spa_syncing_txg(spa_t *spa);
747 extern uint64_t spa_version(spa_t *spa);
748 extern pool_state_t spa_state(spa_t *spa);
749 extern spa_load_state_t spa_load_state(spa_t *spa);
750 extern uint64_t spa_freeze_txg(spa_t *spa);
751 extern uint64_t spa_get_asize(spa_t *spa, uint64_t lsize);
752 extern uint64_t spa_get_dspace(spa_t *spa);
753 extern uint64_t spa_get_slop_space(spa_t *spa);
754 extern void spa_update_dspace(spa_t *spa);
755 extern uint64_t spa_version(spa_t *spa);
756 extern boolean_t spa_deflate(spa_t *spa);
757 extern metaslab_class_t *spa_normal_class(spa_t *spa);
758 extern metaslab_class_t *spa_log_class(spa_t *spa);
759 extern void spa_evicting_os_register(spa_t *, objset_t *os);
760 extern void spa_evicting_os_deregister(spa_t *, objset_t *os);
761 extern void spa_evicting_os_wait(spa_t *spa);
762 extern int spa_max_replication(spa_t *spa);
763 extern int spa_prev_software_version(spa_t *spa);
764 extern int spa_busy(void);
765 extern uint8_t spa_get_failmode(spa_t *spa);
766 extern boolean_t spa_suspended(spa_t *spa);
767 extern uint64_t spa_bootfs(spa_t *spa);
768 extern uint64_t spa_delegation(spa_t *spa);
769 extern objset_t *spa_meta_objset(spa_t *spa);
770 extern uint64_t spa_deadman_synctime(spa_t *spa);
771
772 /* Miscellaneous support routines */
773 extern void spa_activate_mos_feature(spa_t *spa, const char *feature,
774 dmu_tx_t *tx);
775 extern void spa_deactivate_mos_feature(spa_t *spa, const char *feature);
776 extern int spa_rename(const char *oldname, const char *newname);
777 extern spa_t *spa_by_guid(uint64_t pool_guid, uint64_t device_guid);
778 extern boolean_t spa_guid_exists(uint64_t pool_guid, uint64_t device_guid);
779 extern char *spa_strdup(const char *);
780 extern void spa_strfree(char *);
781 extern uint64_t spa_get_random(uint64_t range);
|