xref: /onnv-gate/usr/src/uts/common/sys/fs/zfs.h (revision 13049:bda0decf867b)
1789Sahrens /*
2789Sahrens  * CDDL HEADER START
3789Sahrens  *
4789Sahrens  * The contents of this file are subject to the terms of the
51485Slling  * Common Development and Distribution License (the "License").
61485Slling  * You may not use this file except in compliance with the License.
7789Sahrens  *
8789Sahrens  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9789Sahrens  * or http://www.opensolaris.org/os/licensing.
10789Sahrens  * See the License for the specific language governing permissions
11789Sahrens  * and limitations under the License.
12789Sahrens  *
13789Sahrens  * When distributing Covered Code, include this CDDL HEADER in each
14789Sahrens  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15789Sahrens  * If applicable, add the following below this CDDL HEADER, with the
16789Sahrens  * fields enclosed by brackets "[]" replaced with your own identifying
17789Sahrens  * information: Portions Copyright [yyyy] [name of copyright owner]
18789Sahrens  *
19789Sahrens  * CDDL HEADER END
20789Sahrens  */
2110105Sadam.leventhal@sun.com 
22789Sahrens /*
2312164SMark.Shellenbaum@Sun.COM  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
24789Sahrens  */
25789Sahrens 
2612294SMark.Musante@Sun.COM /* Portions Copyright 2010 Robert Milkowski */
2712294SMark.Musante@Sun.COM 
28789Sahrens #ifndef	_SYS_FS_ZFS_H
29789Sahrens #define	_SYS_FS_ZFS_H
30789Sahrens 
3110242Schris.kirby@sun.com #include <sys/time.h>
3210242Schris.kirby@sun.com 
33789Sahrens #ifdef	__cplusplus
34789Sahrens extern "C" {
35789Sahrens #endif
36789Sahrens 
37789Sahrens /*
38789Sahrens  * Types and constants shared between userland and the kernel.
39789Sahrens  */
40789Sahrens 
41789Sahrens /*
42789Sahrens  * Each dataset can be one of the following types.  These constants can be
43789Sahrens  * combined into masks that can be passed to various functions.
44789Sahrens  */
45789Sahrens typedef enum {
46789Sahrens 	ZFS_TYPE_FILESYSTEM	= 0x1,
47789Sahrens 	ZFS_TYPE_SNAPSHOT	= 0x2,
483912Slling 	ZFS_TYPE_VOLUME		= 0x4,
493912Slling 	ZFS_TYPE_POOL		= 0x8
50789Sahrens } zfs_type_t;
51789Sahrens 
525094Slling #define	ZFS_TYPE_DATASET	\
53789Sahrens 	(ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME | ZFS_TYPE_SNAPSHOT)
54789Sahrens 
559643SEric.Taylor@Sun.COM #define	ZAP_MAXNAMELEN 256
569643SEric.Taylor@Sun.COM #define	ZAP_MAXVALUELEN (1024 * 8)
579643SEric.Taylor@Sun.COM #define	ZAP_OLDMAXVALUELEN 1024
589643SEric.Taylor@Sun.COM 
59789Sahrens /*
605094Slling  * Dataset properties are identified by these constants and must be added to
615094Slling  * the end of this list to ensure that external consumers are not affected
625094Slling  * by the change. If you make any changes to this list, be sure to update
633654Sgw25295  * the property table in usr/src/common/zfs/zfs_prop.c.
64789Sahrens  */
65789Sahrens typedef enum {
66789Sahrens 	ZFS_PROP_TYPE,
67789Sahrens 	ZFS_PROP_CREATION,
68789Sahrens 	ZFS_PROP_USED,
69789Sahrens 	ZFS_PROP_AVAILABLE,
70789Sahrens 	ZFS_PROP_REFERENCED,
71789Sahrens 	ZFS_PROP_COMPRESSRATIO,
72789Sahrens 	ZFS_PROP_MOUNTED,
73789Sahrens 	ZFS_PROP_ORIGIN,
74789Sahrens 	ZFS_PROP_QUOTA,
75789Sahrens 	ZFS_PROP_RESERVATION,
76789Sahrens 	ZFS_PROP_VOLSIZE,
77789Sahrens 	ZFS_PROP_VOLBLOCKSIZE,
78789Sahrens 	ZFS_PROP_RECORDSIZE,
79789Sahrens 	ZFS_PROP_MOUNTPOINT,
80789Sahrens 	ZFS_PROP_SHARENFS,
81789Sahrens 	ZFS_PROP_CHECKSUM,
82789Sahrens 	ZFS_PROP_COMPRESSION,
83789Sahrens 	ZFS_PROP_ATIME,
84789Sahrens 	ZFS_PROP_DEVICES,
85789Sahrens 	ZFS_PROP_EXEC,
86789Sahrens 	ZFS_PROP_SETUID,
87789Sahrens 	ZFS_PROP_READONLY,
88789Sahrens 	ZFS_PROP_ZONED,
89789Sahrens 	ZFS_PROP_SNAPDIR,
9012164SMark.Shellenbaum@Sun.COM 	ZFS_PROP_PRIVATE,		/* not exposed to user, temporary */
91789Sahrens 	ZFS_PROP_ACLINHERIT,
923654Sgw25295 	ZFS_PROP_CREATETXG,		/* not exposed to the user */
933654Sgw25295 	ZFS_PROP_NAME,			/* not exposed to the user */
942676Seschrock 	ZFS_PROP_CANMOUNT,
953654Sgw25295 	ZFS_PROP_ISCSIOPTIONS,		/* not exposed to the user */
963234Sck153898 	ZFS_PROP_XATTR,
973835Sahrens 	ZFS_PROP_NUMCLONES,		/* not exposed to the user */
983912Slling 	ZFS_PROP_COPIES,
994577Sahrens 	ZFS_PROP_VERSION,
1005331Samw 	ZFS_PROP_UTF8ONLY,
1015331Samw 	ZFS_PROP_NORMALIZE,
1025331Samw 	ZFS_PROP_CASE,
1035331Samw 	ZFS_PROP_VSCAN,
1045331Samw 	ZFS_PROP_NBMAND,
1055331Samw 	ZFS_PROP_SHARESMB,
1065378Sck153898 	ZFS_PROP_REFQUOTA,
1075378Sck153898 	ZFS_PROP_REFRESERVATION,
1086643Seschrock 	ZFS_PROP_GUID,
1097237Sek110237 	ZFS_PROP_PRIMARYCACHE,
1107237Sek110237 	ZFS_PROP_SECONDARYCACHE,
1117390SMatthew.Ahrens@Sun.COM 	ZFS_PROP_USEDSNAP,
1127390SMatthew.Ahrens@Sun.COM 	ZFS_PROP_USEDDS,
1137390SMatthew.Ahrens@Sun.COM 	ZFS_PROP_USEDCHILD,
1147390SMatthew.Ahrens@Sun.COM 	ZFS_PROP_USEDREFRESERV,
1159396SMatthew.Ahrens@Sun.COM 	ZFS_PROP_USERACCOUNTING,	/* not exposed to the user */
1169643SEric.Taylor@Sun.COM 	ZFS_PROP_STMF_SHAREINFO,	/* not exposed to the user */
11710242Schris.kirby@sun.com 	ZFS_PROP_DEFER_DESTROY,
11810242Schris.kirby@sun.com 	ZFS_PROP_USERREFS,
11910310SNeil.Perrin@Sun.COM 	ZFS_PROP_LOGBIAS,
12010575SEric.Schrock@Sun.COM 	ZFS_PROP_UNIQUE,		/* not exposed to the user */
12110575SEric.Schrock@Sun.COM 	ZFS_PROP_OBJSETID,		/* not exposed to the user */
12210922SJeff.Bonwick@Sun.COM 	ZFS_PROP_DEDUP,
12310972SRic.Aleshire@Sun.COM 	ZFS_PROP_MLSLABEL,
12412294SMark.Musante@Sun.COM 	ZFS_PROP_SYNC,
1254787Sahrens 	ZFS_NUM_PROPS
126789Sahrens } zfs_prop_t;
127789Sahrens 
1289396SMatthew.Ahrens@Sun.COM typedef enum {
1299396SMatthew.Ahrens@Sun.COM 	ZFS_PROP_USERUSED,
1309396SMatthew.Ahrens@Sun.COM 	ZFS_PROP_USERQUOTA,
1319396SMatthew.Ahrens@Sun.COM 	ZFS_PROP_GROUPUSED,
1329396SMatthew.Ahrens@Sun.COM 	ZFS_PROP_GROUPQUOTA,
1339396SMatthew.Ahrens@Sun.COM 	ZFS_NUM_USERQUOTA_PROPS
1349396SMatthew.Ahrens@Sun.COM } zfs_userquota_prop_t;
1359396SMatthew.Ahrens@Sun.COM 
1369396SMatthew.Ahrens@Sun.COM extern const char *zfs_userquota_prop_prefixes[ZFS_NUM_USERQUOTA_PROPS];
1379396SMatthew.Ahrens@Sun.COM 
1385094Slling /*
1395094Slling  * Pool properties are identified by these constants and must be added to the
1407294Sperrin  * end of this list to ensure that external consumers are not affected
1415094Slling  * by the change. If you make any changes to this list, be sure to update
1425094Slling  * the property table in usr/src/common/zfs/zpool_prop.c.
1435094Slling  */
1445094Slling typedef enum {
1455094Slling 	ZPOOL_PROP_NAME,
1465094Slling 	ZPOOL_PROP_SIZE,
1475094Slling 	ZPOOL_PROP_CAPACITY,
1485094Slling 	ZPOOL_PROP_ALTROOT,
1495094Slling 	ZPOOL_PROP_HEALTH,
1505094Slling 	ZPOOL_PROP_GUID,
1515094Slling 	ZPOOL_PROP_VERSION,
1525094Slling 	ZPOOL_PROP_BOOTFS,
1535094Slling 	ZPOOL_PROP_DELEGATION,
1545094Slling 	ZPOOL_PROP_AUTOREPLACE,
1555363Seschrock 	ZPOOL_PROP_CACHEFILE,
1565329Sgw25295 	ZPOOL_PROP_FAILUREMODE,
1577538SRichard.Morris@Sun.COM 	ZPOOL_PROP_LISTSNAPS,
1589816SGeorge.Wilson@Sun.COM 	ZPOOL_PROP_AUTOEXPAND,
15910922SJeff.Bonwick@Sun.COM 	ZPOOL_PROP_DEDUPDITTO,
16010922SJeff.Bonwick@Sun.COM 	ZPOOL_PROP_DEDUPRATIO,
16110956SGeorge.Wilson@Sun.COM 	ZPOOL_PROP_FREE,
16210956SGeorge.Wilson@Sun.COM 	ZPOOL_PROP_ALLOCATED,
163*13049SGeorge.Wilson@Sun.COM 	ZPOOL_PROP_READONLY,
1645094Slling 	ZPOOL_NUM_PROPS
1655094Slling } zpool_prop_t;
1663912Slling 
1675094Slling #define	ZPROP_CONT		-2
1685094Slling #define	ZPROP_INVAL		-1
1694451Seschrock 
1705094Slling #define	ZPROP_VALUE		"value"
1715094Slling #define	ZPROP_SOURCE		"source"
1721356Seschrock 
1733912Slling typedef enum {
1745094Slling 	ZPROP_SRC_NONE = 0x1,
1755094Slling 	ZPROP_SRC_DEFAULT = 0x2,
1765094Slling 	ZPROP_SRC_TEMPORARY = 0x4,
1775094Slling 	ZPROP_SRC_LOCAL = 0x8,
17811022STom.Erickson@Sun.COM 	ZPROP_SRC_INHERITED = 0x10,
17911022STom.Erickson@Sun.COM 	ZPROP_SRC_RECEIVED = 0x20
1805094Slling } zprop_source_t;
1815094Slling 
18211022STom.Erickson@Sun.COM #define	ZPROP_SRC_ALL	0x3f
18311022STom.Erickson@Sun.COM 
18411022STom.Erickson@Sun.COM #define	ZPROP_SOURCE_VAL_RECVD	"$recvd"
18511022STom.Erickson@Sun.COM #define	ZPROP_N_MORE_ERRORS	"N_MORE_ERRORS"
18611022STom.Erickson@Sun.COM /*
18711022STom.Erickson@Sun.COM  * Dataset flag implemented as a special entry in the props zap object
18811022STom.Erickson@Sun.COM  * indicating that the dataset has received properties on or after
18911022STom.Erickson@Sun.COM  * SPA_VERSION_RECVD_PROPS. The first such receive blows away local properties
19011022STom.Erickson@Sun.COM  * just as it did in earlier versions, and thereafter, local properties are
19111022STom.Erickson@Sun.COM  * preserved.
19211022STom.Erickson@Sun.COM  */
19311022STom.Erickson@Sun.COM #define	ZPROP_HAS_RECVD		"$hasrecvd"
19411022STom.Erickson@Sun.COM 
19511022STom.Erickson@Sun.COM typedef enum {
19611022STom.Erickson@Sun.COM 	ZPROP_ERR_NOCLEAR = 0x1, /* failure to clear existing props */
19711022STom.Erickson@Sun.COM 	ZPROP_ERR_NORESTORE = 0x2 /* failure to restore props on error */
19811022STom.Erickson@Sun.COM } zprop_errflags_t;
1995094Slling 
2005094Slling typedef int (*zprop_func)(int, void *);
2013912Slling 
2025094Slling /*
2037184Stimh  * Properties to be set on the root file system of a new pool
2047184Stimh  * are stuffed into their own nvlist, which is then included in
2057184Stimh  * the properties nvlist with the pool properties.
2067184Stimh  */
2077184Stimh #define	ZPOOL_ROOTFS_PROPS	"root-props-nvl"
2087184Stimh 
2097184Stimh /*
2105094Slling  * Dataset property functions shared between libzfs and kernel.
2115094Slling  */
2125094Slling const char *zfs_prop_default_string(zfs_prop_t);
2135094Slling uint64_t zfs_prop_default_numeric(zfs_prop_t);
2145094Slling boolean_t zfs_prop_readonly(zfs_prop_t);
2155094Slling boolean_t zfs_prop_inheritable(zfs_prop_t);
2165331Samw boolean_t zfs_prop_setonce(zfs_prop_t);
2175094Slling const char *zfs_prop_to_name(zfs_prop_t);
2185094Slling zfs_prop_t zfs_name_to_prop(const char *);
2195094Slling boolean_t zfs_prop_user(const char *);
22011022STom.Erickson@Sun.COM boolean_t zfs_prop_userquota(const char *);
2215094Slling int zfs_prop_index_to_string(zfs_prop_t, uint64_t, const char **);
2225094Slling int zfs_prop_string_to_index(zfs_prop_t, const char *, uint64_t *);
22310922SJeff.Bonwick@Sun.COM uint64_t zfs_prop_random_value(zfs_prop_t, uint64_t seed);
2246690Sgw25295 boolean_t zfs_prop_valid_for_type(int, zfs_type_t);
2253912Slling 
2265094Slling /*
2275094Slling  * Pool property functions shared between libzfs and kernel.
2285094Slling  */
2295094Slling zpool_prop_t zpool_name_to_prop(const char *);
2305094Slling const char *zpool_prop_to_name(zpool_prop_t);
2315094Slling const char *zpool_prop_default_string(zpool_prop_t);
2325094Slling uint64_t zpool_prop_default_numeric(zpool_prop_t);
2335094Slling boolean_t zpool_prop_readonly(zpool_prop_t);
2345094Slling int zpool_prop_index_to_string(zpool_prop_t, uint64_t, const char **);
2355094Slling int zpool_prop_string_to_index(zpool_prop_t, const char *, uint64_t *);
23610922SJeff.Bonwick@Sun.COM uint64_t zpool_prop_random_value(zpool_prop_t, uint64_t seed);
2375094Slling 
2385094Slling /*
2395094Slling  * Definitions for the Delegation.
2405094Slling  */
2414543Smarks typedef enum {
2424543Smarks 	ZFS_DELEG_WHO_UNKNOWN = 0,
2434543Smarks 	ZFS_DELEG_USER = 'u',
2444543Smarks 	ZFS_DELEG_USER_SETS = 'U',
2454543Smarks 	ZFS_DELEG_GROUP = 'g',
2464543Smarks 	ZFS_DELEG_GROUP_SETS = 'G',
2474543Smarks 	ZFS_DELEG_EVERYONE = 'e',
2484543Smarks 	ZFS_DELEG_EVERYONE_SETS = 'E',
2494543Smarks 	ZFS_DELEG_CREATE = 'c',
2504543Smarks 	ZFS_DELEG_CREATE_SETS = 'C',
2514543Smarks 	ZFS_DELEG_NAMED_SET = 's',
2524543Smarks 	ZFS_DELEG_NAMED_SET_SETS = 'S'
2534543Smarks } zfs_deleg_who_type_t;
2544543Smarks 
2554543Smarks typedef enum {
2564543Smarks 	ZFS_DELEG_NONE = 0,
2574543Smarks 	ZFS_DELEG_PERM_LOCAL = 1,
2584543Smarks 	ZFS_DELEG_PERM_DESCENDENT = 2,
2594543Smarks 	ZFS_DELEG_PERM_LOCALDESCENDENT = 3,
2604543Smarks 	ZFS_DELEG_PERM_CREATE = 4
2614543Smarks } zfs_deleg_inherit_t;
2624543Smarks 
2634543Smarks #define	ZFS_DELEG_PERM_UID	"uid"
2644543Smarks #define	ZFS_DELEG_PERM_GID	"gid"
2654543Smarks #define	ZFS_DELEG_PERM_GROUPS	"groups"
2664543Smarks 
26710972SRic.Aleshire@Sun.COM #define	ZFS_MLSLABEL_DEFAULT	"none"
26810972SRic.Aleshire@Sun.COM 
2698845Samw@Sun.COM #define	ZFS_SMB_ACL_SRC		"src"
2708845Samw@Sun.COM #define	ZFS_SMB_ACL_TARGET	"target"
2718845Samw@Sun.COM 
2726168Shs24103 typedef enum {
2736168Shs24103 	ZFS_CANMOUNT_OFF = 0,
2746168Shs24103 	ZFS_CANMOUNT_ON = 1,
2756168Shs24103 	ZFS_CANMOUNT_NOAUTO = 2
2766168Shs24103 } zfs_canmount_type_t;
2776168Shs24103 
27810310SNeil.Perrin@Sun.COM typedef enum {
27910310SNeil.Perrin@Sun.COM 	ZFS_LOGBIAS_LATENCY = 0,
28010310SNeil.Perrin@Sun.COM 	ZFS_LOGBIAS_THROUGHPUT = 1
28110310SNeil.Perrin@Sun.COM } zfs_logbias_op_t;
28210310SNeil.Perrin@Sun.COM 
2835331Samw typedef enum zfs_share_op {
2845331Samw 	ZFS_SHARE_NFS = 0,
2855331Samw 	ZFS_UNSHARE_NFS = 1,
2865331Samw 	ZFS_SHARE_SMB = 2,
2875331Samw 	ZFS_UNSHARE_SMB = 3
2885331Samw } zfs_share_op_t;
2895331Samw 
2908845Samw@Sun.COM typedef enum zfs_smb_acl_op {
2918845Samw@Sun.COM 	ZFS_SMB_ACL_ADD,
2928845Samw@Sun.COM 	ZFS_SMB_ACL_REMOVE,
2938845Samw@Sun.COM 	ZFS_SMB_ACL_RENAME,
2948845Samw@Sun.COM 	ZFS_SMB_ACL_PURGE
2958845Samw@Sun.COM } zfs_smb_acl_op_t;
2968845Samw@Sun.COM 
2977237Sek110237 typedef enum zfs_cache_type {
2987237Sek110237 	ZFS_CACHE_NONE = 0,
2997237Sek110237 	ZFS_CACHE_METADATA = 1,
3007237Sek110237 	ZFS_CACHE_ALL = 2
3017237Sek110237 } zfs_cache_type_t;
3027237Sek110237 
30312294SMark.Musante@Sun.COM typedef enum {
30412294SMark.Musante@Sun.COM 	ZFS_SYNC_STANDARD = 0,
30512294SMark.Musante@Sun.COM 	ZFS_SYNC_ALWAYS = 1,
30612294SMark.Musante@Sun.COM 	ZFS_SYNC_DISABLED = 2
30712294SMark.Musante@Sun.COM } zfs_sync_type_t;
30812294SMark.Musante@Sun.COM 
3097237Sek110237 
310789Sahrens /*
3112082Seschrock  * On-disk version number.
3121760Seschrock  */
3134577Sahrens #define	SPA_VERSION_1			1ULL
3144577Sahrens #define	SPA_VERSION_2			2ULL
3154577Sahrens #define	SPA_VERSION_3			3ULL
3164577Sahrens #define	SPA_VERSION_4			4ULL
3174577Sahrens #define	SPA_VERSION_5			5ULL
3184577Sahrens #define	SPA_VERSION_6			6ULL
3194577Sahrens #define	SPA_VERSION_7			7ULL
3204577Sahrens #define	SPA_VERSION_8			8ULL
3215331Samw #define	SPA_VERSION_9			9ULL
3225450Sbrendan #define	SPA_VERSION_10			10ULL
3237046Sahrens #define	SPA_VERSION_11			11ULL
3247265Sahrens #define	SPA_VERSION_12			12ULL
3257390SMatthew.Ahrens@Sun.COM #define	SPA_VERSION_13			13ULL
3268053SMark.Shellenbaum@Sun.COM #define	SPA_VERSION_14			14ULL
3279396SMatthew.Ahrens@Sun.COM #define	SPA_VERSION_15			15ULL
3289643SEric.Taylor@Sun.COM #define	SPA_VERSION_16			16ULL
32910105Sadam.leventhal@sun.com #define	SPA_VERSION_17			17ULL
33010242Schris.kirby@sun.com #define	SPA_VERSION_18			18ULL
33110594SGeorge.Wilson@Sun.COM #define	SPA_VERSION_19			19ULL
33210922SJeff.Bonwick@Sun.COM #define	SPA_VERSION_20			20ULL
33310922SJeff.Bonwick@Sun.COM #define	SPA_VERSION_21			21ULL
33411022STom.Erickson@Sun.COM #define	SPA_VERSION_22			22ULL
33511670SNeil.Perrin@Sun.COM #define	SPA_VERSION_23			23ULL
33611935SMark.Shellenbaum@Sun.COM #define	SPA_VERSION_24			24ULL
33712296SLin.Ling@Sun.COM #define	SPA_VERSION_25			25ULL
33812470SMatthew.Ahrens@Sun.COM #define	SPA_VERSION_26			26ULL
33912827SMatthew.Ahrens@Sun.COM #define	SPA_VERSION_27			27ULL
34013037SMark.Musante@Sun.COM #define	SPA_VERSION_28			28ULL
34113037SMark.Musante@Sun.COM 
3423912Slling /*
3436423Sgw25295  * When bumping up SPA_VERSION, make sure GRUB ZFS understands the on-disk
3449643SEric.Taylor@Sun.COM  * format change. Go to usr/src/grub/grub-0.97/stage2/{zfs-include/, fsys_zfs*},
3459396SMatthew.Ahrens@Sun.COM  * and do the appropriate changes.  Also bump the version number in
3469396SMatthew.Ahrens@Sun.COM  * usr/src/grub/capability.
3473912Slling  */
34813037SMark.Musante@Sun.COM #define	SPA_VERSION			SPA_VERSION_28
34913037SMark.Musante@Sun.COM #define	SPA_VERSION_STRING		"28"
3501775Sbillm 
3511775Sbillm /*
3524577Sahrens  * Symbolic names for the changes that caused a SPA_VERSION switch.
3531775Sbillm  * Used in the code when checking for presence or absence of a feature.
3541775Sbillm  * Feel free to define multiple symbolic names for each version if there
3551775Sbillm  * were multiple changes to on-disk structures during that version.
3561775Sbillm  *
3574577Sahrens  * NOTE: When checking the current SPA_VERSION in your code, be sure
3581775Sbillm  *       to use spa_version() since it reports the version of the
3591775Sbillm  *       last synced uberblock.  Checking the in-flight version can
3601775Sbillm  *       be dangerous in some cases.
3611775Sbillm  */
3624577Sahrens #define	SPA_VERSION_INITIAL		SPA_VERSION_1
3634577Sahrens #define	SPA_VERSION_DITTO_BLOCKS	SPA_VERSION_2
3644577Sahrens #define	SPA_VERSION_SPARES		SPA_VERSION_3
36510105Sadam.leventhal@sun.com #define	SPA_VERSION_RAIDZ2		SPA_VERSION_3
36612470SMatthew.Ahrens@Sun.COM #define	SPA_VERSION_BPOBJ_ACCOUNT	SPA_VERSION_3
3674577Sahrens #define	SPA_VERSION_RAIDZ_DEFLATE	SPA_VERSION_3
3684577Sahrens #define	SPA_VERSION_DNODE_BYTES		SPA_VERSION_3
3694577Sahrens #define	SPA_VERSION_ZPOOL_HISTORY	SPA_VERSION_4
3704577Sahrens #define	SPA_VERSION_GZIP_COMPRESSION	SPA_VERSION_5
3714577Sahrens #define	SPA_VERSION_BOOTFS		SPA_VERSION_6
3725094Slling #define	SPA_VERSION_SLOGS		SPA_VERSION_7
3735094Slling #define	SPA_VERSION_DELEGATED_PERMS	SPA_VERSION_8
3745331Samw #define	SPA_VERSION_FUID		SPA_VERSION_9
3755378Sck153898 #define	SPA_VERSION_REFRESERVATION	SPA_VERSION_9
3765378Sck153898 #define	SPA_VERSION_REFQUOTA		SPA_VERSION_9
3775378Sck153898 #define	SPA_VERSION_UNIQUE_ACCURATE	SPA_VERSION_9
3785450Sbrendan #define	SPA_VERSION_L2CACHE		SPA_VERSION_10
3797046Sahrens #define	SPA_VERSION_NEXT_CLONES		SPA_VERSION_11
3807046Sahrens #define	SPA_VERSION_ORIGIN		SPA_VERSION_11
3817046Sahrens #define	SPA_VERSION_DSL_SCRUB		SPA_VERSION_11
3827265Sahrens #define	SPA_VERSION_SNAP_PROPS		SPA_VERSION_12
3837390SMatthew.Ahrens@Sun.COM #define	SPA_VERSION_USED_BREAKDOWN	SPA_VERSION_13
3848053SMark.Shellenbaum@Sun.COM #define	SPA_VERSION_PASSTHROUGH_X	SPA_VERSION_14
3859396SMatthew.Ahrens@Sun.COM #define	SPA_VERSION_USERSPACE		SPA_VERSION_15
3869643SEric.Taylor@Sun.COM #define	SPA_VERSION_STMF_PROP		SPA_VERSION_16
38710105Sadam.leventhal@sun.com #define	SPA_VERSION_RAIDZ3		SPA_VERSION_17
38810242Schris.kirby@sun.com #define	SPA_VERSION_USERREFS		SPA_VERSION_18
38910594SGeorge.Wilson@Sun.COM #define	SPA_VERSION_HOLES		SPA_VERSION_19
39010922SJeff.Bonwick@Sun.COM #define	SPA_VERSION_ZLE_COMPRESSION	SPA_VERSION_20
39110922SJeff.Bonwick@Sun.COM #define	SPA_VERSION_DEDUP		SPA_VERSION_21
39211022STom.Erickson@Sun.COM #define	SPA_VERSION_RECVD_PROPS		SPA_VERSION_22
39311670SNeil.Perrin@Sun.COM #define	SPA_VERSION_SLIM_ZIL		SPA_VERSION_23
39411935SMark.Shellenbaum@Sun.COM #define	SPA_VERSION_SA			SPA_VERSION_24
39512296SLin.Ling@Sun.COM #define	SPA_VERSION_SCAN		SPA_VERSION_25
39612470SMatthew.Ahrens@Sun.COM #define	SPA_VERSION_DIR_CLONES		SPA_VERSION_26
39712470SMatthew.Ahrens@Sun.COM #define	SPA_VERSION_DEADLISTS		SPA_VERSION_26
39812827SMatthew.Ahrens@Sun.COM #define	SPA_VERSION_FAST_SNAP		SPA_VERSION_27
39913037SMark.Musante@Sun.COM #define	SPA_VERSION_MULTI_REPLACE	SPA_VERSION_28
4004577Sahrens 
4014577Sahrens /*
4024577Sahrens  * ZPL version - rev'd whenever an incompatible on-disk format change
4034577Sahrens  * occurs.  This is independent of SPA/DMU/ZAP versioning.  You must
4044577Sahrens  * also update the version_table[] and help message in zfs_prop.c.
4054577Sahrens  *
4064577Sahrens  * When changing, be sure to teach GRUB how to read the new format!
4079643SEric.Taylor@Sun.COM  * See usr/src/grub/grub-0.97/stage2/{zfs-include/,fsys_zfs*}
4084577Sahrens  */
4094577Sahrens #define	ZPL_VERSION_1			1ULL
4104577Sahrens #define	ZPL_VERSION_2			2ULL
4115331Samw #define	ZPL_VERSION_3			3ULL
4129396SMatthew.Ahrens@Sun.COM #define	ZPL_VERSION_4			4ULL
41311935SMark.Shellenbaum@Sun.COM #define	ZPL_VERSION_5			5ULL
41411935SMark.Shellenbaum@Sun.COM #define	ZPL_VERSION			ZPL_VERSION_5
41511935SMark.Shellenbaum@Sun.COM #define	ZPL_VERSION_STRING		"5"
4164577Sahrens 
4174577Sahrens #define	ZPL_VERSION_INITIAL		ZPL_VERSION_1
4184577Sahrens #define	ZPL_VERSION_DIRENT_TYPE		ZPL_VERSION_2
4195331Samw #define	ZPL_VERSION_FUID		ZPL_VERSION_3
4205498Stimh #define	ZPL_VERSION_NORMALIZATION	ZPL_VERSION_3
4215331Samw #define	ZPL_VERSION_SYSATTR		ZPL_VERSION_3
4229396SMatthew.Ahrens@Sun.COM #define	ZPL_VERSION_USERSPACE		ZPL_VERSION_4
42311935SMark.Shellenbaum@Sun.COM #define	ZPL_VERSION_SA			ZPL_VERSION_5
4241760Seschrock 
42510921STim.Haley@Sun.COM /* Rewind request information */
42611727SVictor.Latushkin@Sun.COM #define	ZPOOL_NO_REWIND		1  /* No policy - default behavior */
42711727SVictor.Latushkin@Sun.COM #define	ZPOOL_NEVER_REWIND	2  /* Do not search for best txg or rewind */
42811727SVictor.Latushkin@Sun.COM #define	ZPOOL_TRY_REWIND	4  /* Search for best txg, but do not rewind */
42911727SVictor.Latushkin@Sun.COM #define	ZPOOL_DO_REWIND		8  /* Rewind to best txg w/in deferred frees */
43011727SVictor.Latushkin@Sun.COM #define	ZPOOL_EXTREME_REWIND	16 /* Allow extreme measures to find best txg */
43111727SVictor.Latushkin@Sun.COM #define	ZPOOL_REWIND_MASK	28 /* All the possible rewind bits */
43211727SVictor.Latushkin@Sun.COM #define	ZPOOL_REWIND_POLICIES	31 /* All the possible policy bits */
43310921STim.Haley@Sun.COM 
43410921STim.Haley@Sun.COM typedef struct zpool_rewind_policy {
43510921STim.Haley@Sun.COM 	uint32_t	zrp_request;	/* rewind behavior requested */
43611727SVictor.Latushkin@Sun.COM 	uint64_t	zrp_maxmeta;	/* max acceptable meta-data errors */
43711727SVictor.Latushkin@Sun.COM 	uint64_t	zrp_maxdata;	/* max acceptable data errors */
43810921STim.Haley@Sun.COM 	uint64_t	zrp_txg;	/* specific txg to load */
43910921STim.Haley@Sun.COM } zpool_rewind_policy_t;
44010921STim.Haley@Sun.COM 
4411760Seschrock /*
442789Sahrens  * The following are configuration names used in the nvlist describing a pool's
443789Sahrens  * configuration.
444789Sahrens  */
445789Sahrens #define	ZPOOL_CONFIG_VERSION		"version"
446789Sahrens #define	ZPOOL_CONFIG_POOL_NAME		"name"
447789Sahrens #define	ZPOOL_CONFIG_POOL_STATE		"state"
448789Sahrens #define	ZPOOL_CONFIG_POOL_TXG		"txg"
449789Sahrens #define	ZPOOL_CONFIG_POOL_GUID		"pool_guid"
450789Sahrens #define	ZPOOL_CONFIG_CREATE_TXG		"create_txg"
451789Sahrens #define	ZPOOL_CONFIG_TOP_GUID		"top_guid"
452789Sahrens #define	ZPOOL_CONFIG_VDEV_TREE		"vdev_tree"
453789Sahrens #define	ZPOOL_CONFIG_TYPE		"type"
454789Sahrens #define	ZPOOL_CONFIG_CHILDREN		"children"
455789Sahrens #define	ZPOOL_CONFIG_ID			"id"
456789Sahrens #define	ZPOOL_CONFIG_GUID		"guid"
457789Sahrens #define	ZPOOL_CONFIG_PATH		"path"
458789Sahrens #define	ZPOOL_CONFIG_DEVID		"devid"
459789Sahrens #define	ZPOOL_CONFIG_METASLAB_ARRAY	"metaslab_array"
460789Sahrens #define	ZPOOL_CONFIG_METASLAB_SHIFT	"metaslab_shift"
461789Sahrens #define	ZPOOL_CONFIG_ASHIFT		"ashift"
462789Sahrens #define	ZPOOL_CONFIG_ASIZE		"asize"
463789Sahrens #define	ZPOOL_CONFIG_DTL		"DTL"
46412296SLin.Ling@Sun.COM #define	ZPOOL_CONFIG_SCAN_STATS		"scan_stats"	/* not stored on disk */
46512296SLin.Ling@Sun.COM #define	ZPOOL_CONFIG_VDEV_STATS		"vdev_stats"	/* not stored on disk */
4661171Seschrock #define	ZPOOL_CONFIG_WHOLE_DISK		"whole_disk"
4671544Seschrock #define	ZPOOL_CONFIG_ERRCOUNT		"error_count"
4681544Seschrock #define	ZPOOL_CONFIG_NOT_PRESENT	"not_present"
4692082Seschrock #define	ZPOOL_CONFIG_SPARES		"spares"
4702082Seschrock #define	ZPOOL_CONFIG_IS_SPARE		"is_spare"
4712082Seschrock #define	ZPOOL_CONFIG_NPARITY		"nparity"
4723975Sek110237 #define	ZPOOL_CONFIG_HOSTID		"hostid"
4733975Sek110237 #define	ZPOOL_CONFIG_HOSTNAME		"hostname"
47412817STim.Haley@Sun.COM #define	ZPOOL_CONFIG_LOADED_TIME	"initial_load_time"
4754451Seschrock #define	ZPOOL_CONFIG_UNSPARE		"unspare"
4764451Seschrock #define	ZPOOL_CONFIG_PHYS_PATH		"phys_path"
4774527Sperrin #define	ZPOOL_CONFIG_IS_LOG		"is_log"
4785450Sbrendan #define	ZPOOL_CONFIG_L2CACHE		"l2cache"
47910594SGeorge.Wilson@Sun.COM #define	ZPOOL_CONFIG_HOLE_ARRAY		"hole_array"
48010594SGeorge.Wilson@Sun.COM #define	ZPOOL_CONFIG_VDEV_CHILDREN	"vdev_children"
48110594SGeorge.Wilson@Sun.COM #define	ZPOOL_CONFIG_IS_HOLE		"is_hole"
48211149SGeorge.Wilson@Sun.COM #define	ZPOOL_CONFIG_DDT_HISTOGRAM	"ddt_histogram"
48311149SGeorge.Wilson@Sun.COM #define	ZPOOL_CONFIG_DDT_OBJ_STATS	"ddt_object_stats"
48411149SGeorge.Wilson@Sun.COM #define	ZPOOL_CONFIG_DDT_STATS		"ddt_stats"
48511422SMark.Musante@Sun.COM #define	ZPOOL_CONFIG_SPLIT		"splitcfg"
48611422SMark.Musante@Sun.COM #define	ZPOOL_CONFIG_ORIG_GUID		"orig_guid"
48711422SMark.Musante@Sun.COM #define	ZPOOL_CONFIG_SPLIT_GUID		"split_guid"
48811422SMark.Musante@Sun.COM #define	ZPOOL_CONFIG_SPLIT_LIST		"guid_list"
48912296SLin.Ling@Sun.COM #define	ZPOOL_CONFIG_REMOVING		"removing"
49013037SMark.Musante@Sun.COM #define	ZPOOL_CONFIG_RESILVERING	"resilvering"
4917754SJeff.Bonwick@Sun.COM #define	ZPOOL_CONFIG_SUSPENDED		"suspended"	/* not stored on disk */
4926423Sgw25295 #define	ZPOOL_CONFIG_TIMESTAMP		"timestamp"	/* not stored on disk */
4936423Sgw25295 #define	ZPOOL_CONFIG_BOOTFS		"bootfs"	/* not stored on disk */
49412949SGeorge.Wilson@Sun.COM #define	ZPOOL_CONFIG_MISSING_DEVICES	"missing_vdevs"	/* not stored on disk */
49512949SGeorge.Wilson@Sun.COM #define	ZPOOL_CONFIG_LOAD_INFO		"load_info"	/* not stored on disk */
4964451Seschrock /*
4974451Seschrock  * The persistent vdev state is stored as separate values rather than a single
4984451Seschrock  * 'vdev_state' entry.  This is because a device can be in multiple states, such
4994451Seschrock  * as offline and degraded.
5004451Seschrock  */
5014451Seschrock #define	ZPOOL_CONFIG_OFFLINE		"offline"
5024451Seschrock #define	ZPOOL_CONFIG_FAULTED		"faulted"
5034451Seschrock #define	ZPOOL_CONFIG_DEGRADED		"degraded"
5044451Seschrock #define	ZPOOL_CONFIG_REMOVED		"removed"
5059425SEric.Schrock@Sun.COM #define	ZPOOL_CONFIG_FRU		"fru"
50610817SEric.Schrock@Sun.COM #define	ZPOOL_CONFIG_AUX_STATE		"aux_state"
507789Sahrens 
50810921STim.Haley@Sun.COM /* Rewind policy parameters */
50910921STim.Haley@Sun.COM #define	ZPOOL_REWIND_POLICY		"rewind-policy"
51010921STim.Haley@Sun.COM #define	ZPOOL_REWIND_REQUEST		"rewind-request"
51110921STim.Haley@Sun.COM #define	ZPOOL_REWIND_REQUEST_TXG	"rewind-request-txg"
51210921STim.Haley@Sun.COM #define	ZPOOL_REWIND_META_THRESH	"rewind-meta-thresh"
51310921STim.Haley@Sun.COM #define	ZPOOL_REWIND_DATA_THRESH	"rewind-data-thresh"
51410921STim.Haley@Sun.COM 
51510921STim.Haley@Sun.COM /* Rewind data discovered */
51610921STim.Haley@Sun.COM #define	ZPOOL_CONFIG_LOAD_TIME		"rewind_txg_ts"
51710921STim.Haley@Sun.COM #define	ZPOOL_CONFIG_LOAD_DATA_ERRORS	"verify_data_errors"
51810921STim.Haley@Sun.COM #define	ZPOOL_CONFIG_REWIND_TIME	"seconds_of_rewind"
51910921STim.Haley@Sun.COM 
520789Sahrens #define	VDEV_TYPE_ROOT			"root"
521789Sahrens #define	VDEV_TYPE_MIRROR		"mirror"
522789Sahrens #define	VDEV_TYPE_REPLACING		"replacing"
523789Sahrens #define	VDEV_TYPE_RAIDZ			"raidz"
524789Sahrens #define	VDEV_TYPE_DISK			"disk"
525789Sahrens #define	VDEV_TYPE_FILE			"file"
526789Sahrens #define	VDEV_TYPE_MISSING		"missing"
52710594SGeorge.Wilson@Sun.COM #define	VDEV_TYPE_HOLE			"hole"
5282082Seschrock #define	VDEV_TYPE_SPARE			"spare"
5294527Sperrin #define	VDEV_TYPE_LOG			"log"
5305450Sbrendan #define	VDEV_TYPE_L2CACHE		"l2cache"
531789Sahrens 
532789Sahrens /*
533789Sahrens  * This is needed in userland to report the minimum necessary device size.
534789Sahrens  */
535789Sahrens #define	SPA_MINDEVSIZE		(64ULL << 20)
536789Sahrens 
537789Sahrens /*
538789Sahrens  * The location of the pool configuration repository, shared between kernel and
539789Sahrens  * userland.
540789Sahrens  */
5416643Seschrock #define	ZPOOL_CACHE		"/etc/zfs/zpool.cache"
542789Sahrens 
543789Sahrens /*
544789Sahrens  * vdev states are ordered from least to most healthy.
545789Sahrens  * A vdev that's CANT_OPEN or below is considered unusable.
546789Sahrens  */
547789Sahrens typedef enum vdev_state {
548789Sahrens 	VDEV_STATE_UNKNOWN = 0,	/* Uninitialized vdev			*/
549789Sahrens 	VDEV_STATE_CLOSED,	/* Not currently open			*/
550789Sahrens 	VDEV_STATE_OFFLINE,	/* Not allowed to open			*/
5514451Seschrock 	VDEV_STATE_REMOVED,	/* Explicitly removed from system	*/
552789Sahrens 	VDEV_STATE_CANT_OPEN,	/* Tried to open, but failed		*/
5534451Seschrock 	VDEV_STATE_FAULTED,	/* External request to fault device	*/
554789Sahrens 	VDEV_STATE_DEGRADED,	/* Replicated vdev with unhealthy kids	*/
555789Sahrens 	VDEV_STATE_HEALTHY	/* Presumed good			*/
556789Sahrens } vdev_state_t;
557789Sahrens 
5584451Seschrock #define	VDEV_STATE_ONLINE	VDEV_STATE_HEALTHY
5594451Seschrock 
560789Sahrens /*
561789Sahrens  * vdev aux states.  When a vdev is in the CANT_OPEN state, the aux field
562789Sahrens  * of the vdev stats structure uses these constants to distinguish why.
563789Sahrens  */
564789Sahrens typedef enum vdev_aux {
565789Sahrens 	VDEV_AUX_NONE,		/* no error				*/
566789Sahrens 	VDEV_AUX_OPEN_FAILED,	/* ldi_open_*() or vn_open() failed	*/
567789Sahrens 	VDEV_AUX_CORRUPT_DATA,	/* bad label or disk contents		*/
568789Sahrens 	VDEV_AUX_NO_REPLICAS,	/* insufficient number of replicas	*/
569789Sahrens 	VDEV_AUX_BAD_GUID_SUM,	/* vdev guid sum doesn't match		*/
570789Sahrens 	VDEV_AUX_TOO_SMALL,	/* vdev size is too small		*/
5711760Seschrock 	VDEV_AUX_BAD_LABEL,	/* the label is OK but invalid		*/
5721760Seschrock 	VDEV_AUX_VERSION_NEWER,	/* on-disk version is too new		*/
5732082Seschrock 	VDEV_AUX_VERSION_OLDER,	/* on-disk version is too old		*/
5744451Seschrock 	VDEV_AUX_SPARED,	/* hot spare used in another pool	*/
5756523Sek110237 	VDEV_AUX_ERR_EXCEEDED,	/* too many errors			*/
5767294Sperrin 	VDEV_AUX_IO_FAILURE,	/* experienced I/O failure		*/
57710817SEric.Schrock@Sun.COM 	VDEV_AUX_BAD_LOG,	/* cannot read log chain(s)		*/
57811422SMark.Musante@Sun.COM 	VDEV_AUX_EXTERNAL,	/* external diagnosis			*/
57911422SMark.Musante@Sun.COM 	VDEV_AUX_SPLIT_POOL	/* vdev was split off into another pool	*/
580789Sahrens } vdev_aux_t;
581789Sahrens 
582789Sahrens /*
5831352Seschrock  * pool state.  The following states are written to disk as part of the normal
5845450Sbrendan  * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE.  The remaining
5855450Sbrendan  * states are software abstractions used at various levels to communicate
5865450Sbrendan  * pool state.
587789Sahrens  */
588789Sahrens typedef enum pool_state {
589789Sahrens 	POOL_STATE_ACTIVE = 0,		/* In active use		*/
590789Sahrens 	POOL_STATE_EXPORTED,		/* Explicitly exported		*/
591789Sahrens 	POOL_STATE_DESTROYED,		/* Explicitly destroyed		*/
5922082Seschrock 	POOL_STATE_SPARE,		/* Reserved for hot spare use	*/
5935450Sbrendan 	POOL_STATE_L2CACHE,		/* Level 2 ARC device		*/
594789Sahrens 	POOL_STATE_UNINITIALIZED,	/* Internal spa_t state		*/
5951352Seschrock 	POOL_STATE_UNAVAIL,		/* Internal libzfs state	*/
5961352Seschrock 	POOL_STATE_POTENTIALLY_ACTIVE	/* Internal libzfs state	*/
597789Sahrens } pool_state_t;
598789Sahrens 
599789Sahrens /*
60012296SLin.Ling@Sun.COM  * Scan Functions.
601789Sahrens  */
60212296SLin.Ling@Sun.COM typedef enum pool_scan_func {
60312296SLin.Ling@Sun.COM 	POOL_SCAN_NONE,
60412296SLin.Ling@Sun.COM 	POOL_SCAN_SCRUB,
60512296SLin.Ling@Sun.COM 	POOL_SCAN_RESILVER,
60612296SLin.Ling@Sun.COM 	POOL_SCAN_FUNCS
60712296SLin.Ling@Sun.COM } pool_scan_func_t;
608789Sahrens 
609789Sahrens /*
610789Sahrens  * ZIO types.  Needed to interpret vdev statistics below.
611789Sahrens  */
612789Sahrens typedef enum zio_type {
613789Sahrens 	ZIO_TYPE_NULL = 0,
614789Sahrens 	ZIO_TYPE_READ,
615789Sahrens 	ZIO_TYPE_WRITE,
616789Sahrens 	ZIO_TYPE_FREE,
617789Sahrens 	ZIO_TYPE_CLAIM,
618789Sahrens 	ZIO_TYPE_IOCTL,
619789Sahrens 	ZIO_TYPES
620789Sahrens } zio_type_t;
621789Sahrens 
622789Sahrens /*
62312296SLin.Ling@Sun.COM  * Pool statistics.  Note: all fields should be 64-bit because this
62412296SLin.Ling@Sun.COM  * is passed between kernel and userland as an nvlist uint64 array.
62512296SLin.Ling@Sun.COM  */
62612296SLin.Ling@Sun.COM typedef struct pool_scan_stat {
62712296SLin.Ling@Sun.COM 	/* values stored on disk */
62812296SLin.Ling@Sun.COM 	uint64_t	pss_func;	/* pool_scan_func_t */
62912296SLin.Ling@Sun.COM 	uint64_t	pss_state;	/* dsl_scan_state_t */
63012296SLin.Ling@Sun.COM 	uint64_t	pss_start_time;	/* scan start time */
63112296SLin.Ling@Sun.COM 	uint64_t	pss_end_time;	/* scan end time */
63212296SLin.Ling@Sun.COM 	uint64_t	pss_to_examine;	/* total bytes to scan */
63312296SLin.Ling@Sun.COM 	uint64_t	pss_examined;	/* total examined bytes	*/
63412296SLin.Ling@Sun.COM 	uint64_t	pss_to_process; /* total bytes to process */
63512296SLin.Ling@Sun.COM 	uint64_t	pss_processed;	/* total processed bytes */
63612296SLin.Ling@Sun.COM 	uint64_t	pss_errors;	/* scan errors	*/
63712296SLin.Ling@Sun.COM 
63812296SLin.Ling@Sun.COM 	/* values not stored on disk */
63912296SLin.Ling@Sun.COM 	uint64_t	pss_pass_exam;	/* examined bytes per scan pass */
64012296SLin.Ling@Sun.COM 	uint64_t	pss_pass_start;	/* start time of a scan pass */
64112296SLin.Ling@Sun.COM } pool_scan_stat_t;
64212296SLin.Ling@Sun.COM 
64312296SLin.Ling@Sun.COM typedef enum dsl_scan_state {
64412296SLin.Ling@Sun.COM 	DSS_NONE,
64512296SLin.Ling@Sun.COM 	DSS_SCANNING,
64612296SLin.Ling@Sun.COM 	DSS_FINISHED,
64712296SLin.Ling@Sun.COM 	DSS_CANCELED,
64812296SLin.Ling@Sun.COM 	DSS_NUM_STATES
64912296SLin.Ling@Sun.COM } dsl_scan_state_t;
65012296SLin.Ling@Sun.COM 
65112296SLin.Ling@Sun.COM 
65212296SLin.Ling@Sun.COM /*
653789Sahrens  * Vdev statistics.  Note: all fields should be 64-bit because this
654789Sahrens  * is passed between kernel and userland as an nvlist uint64 array.
655789Sahrens  */
656789Sahrens typedef struct vdev_stat {
657789Sahrens 	hrtime_t	vs_timestamp;		/* time since vdev load	*/
658789Sahrens 	uint64_t	vs_state;		/* vdev state		*/
659789Sahrens 	uint64_t	vs_aux;			/* see vdev_aux_t	*/
660789Sahrens 	uint64_t	vs_alloc;		/* space allocated	*/
661789Sahrens 	uint64_t	vs_space;		/* total capacity	*/
6622082Seschrock 	uint64_t	vs_dspace;		/* deflated capacity	*/
6631175Slling 	uint64_t	vs_rsize;		/* replaceable dev size */
664789Sahrens 	uint64_t	vs_ops[ZIO_TYPES];	/* operation count	*/
665789Sahrens 	uint64_t	vs_bytes[ZIO_TYPES];	/* bytes read/written	*/
666789Sahrens 	uint64_t	vs_read_errors;		/* read errors		*/
667789Sahrens 	uint64_t	vs_write_errors;	/* write errors		*/
668789Sahrens 	uint64_t	vs_checksum_errors;	/* checksum errors	*/
669789Sahrens 	uint64_t	vs_self_healed;		/* self-healed bytes	*/
67012296SLin.Ling@Sun.COM 	uint64_t	vs_scan_removing;	/* removing?	*/
67112296SLin.Ling@Sun.COM 	uint64_t	vs_scan_processed;	/* scan processed bytes	*/
672789Sahrens } vdev_stat_t;
673789Sahrens 
67411149SGeorge.Wilson@Sun.COM /*
67511149SGeorge.Wilson@Sun.COM  * DDT statistics.  Note: all fields should be 64-bit because this
67611149SGeorge.Wilson@Sun.COM  * is passed between kernel and userland as an nvlist uint64 array.
67711149SGeorge.Wilson@Sun.COM  */
67811149SGeorge.Wilson@Sun.COM typedef struct ddt_object {
67911149SGeorge.Wilson@Sun.COM 	uint64_t	ddo_count;	/* number of elments in ddt 	*/
68011149SGeorge.Wilson@Sun.COM 	uint64_t	ddo_dspace;	/* size of ddt on disk		*/
68111149SGeorge.Wilson@Sun.COM 	uint64_t	ddo_mspace;	/* size of ddt in-core		*/
68211149SGeorge.Wilson@Sun.COM } ddt_object_t;
68311149SGeorge.Wilson@Sun.COM 
68411149SGeorge.Wilson@Sun.COM typedef struct ddt_stat {
68511149SGeorge.Wilson@Sun.COM 	uint64_t	dds_blocks;	/* blocks			*/
68611149SGeorge.Wilson@Sun.COM 	uint64_t	dds_lsize;	/* logical size			*/
68711149SGeorge.Wilson@Sun.COM 	uint64_t	dds_psize;	/* physical size		*/
68811149SGeorge.Wilson@Sun.COM 	uint64_t	dds_dsize;	/* deflated allocated size	*/
68911149SGeorge.Wilson@Sun.COM 	uint64_t	dds_ref_blocks;	/* referenced blocks		*/
69011149SGeorge.Wilson@Sun.COM 	uint64_t	dds_ref_lsize;	/* referenced lsize * refcnt	*/
69111149SGeorge.Wilson@Sun.COM 	uint64_t	dds_ref_psize;	/* referenced psize * refcnt	*/
69211149SGeorge.Wilson@Sun.COM 	uint64_t	dds_ref_dsize;	/* referenced dsize * refcnt	*/
69311149SGeorge.Wilson@Sun.COM } ddt_stat_t;
69411149SGeorge.Wilson@Sun.COM 
69511149SGeorge.Wilson@Sun.COM typedef struct ddt_histogram {
69611149SGeorge.Wilson@Sun.COM 	ddt_stat_t	ddh_stat[64];	/* power-of-two histogram buckets */
69711149SGeorge.Wilson@Sun.COM } ddt_histogram_t;
69811149SGeorge.Wilson@Sun.COM 
6996423Sgw25295 #define	ZVOL_DRIVER	"zvol"
700789Sahrens #define	ZFS_DRIVER	"zfs"
701789Sahrens #define	ZFS_DEV		"/dev/zfs"
702789Sahrens 
70310588SEric.Taylor@Sun.COM /* general zvol path */
70410588SEric.Taylor@Sun.COM #define	ZVOL_DIR		"/dev/zvol"
70510588SEric.Taylor@Sun.COM /* expansion */
7069816SGeorge.Wilson@Sun.COM #define	ZVOL_PSEUDO_DEV		"/devices/pseudo/zfs@0:"
70710588SEric.Taylor@Sun.COM /* for dump and swap */
70810588SEric.Taylor@Sun.COM #define	ZVOL_FULL_DEV_DIR	ZVOL_DIR "/dsk/"
70910588SEric.Taylor@Sun.COM #define	ZVOL_FULL_RDEV_DIR	ZVOL_DIR "/rdsk/"
710789Sahrens 
711789Sahrens #define	ZVOL_PROP_NAME		"name"
71211449SEric.Taylor@Sun.COM #define	ZVOL_DEFAULT_BLOCKSIZE	8192
713789Sahrens 
714789Sahrens /*
715789Sahrens  * /dev/zfs ioctl numbers.
716789Sahrens  */
717789Sahrens #define	ZFS_IOC		('Z' << 8)
718789Sahrens 
719789Sahrens typedef enum zfs_ioc {
720789Sahrens 	ZFS_IOC_POOL_CREATE = ZFS_IOC,
721789Sahrens 	ZFS_IOC_POOL_DESTROY,
722789Sahrens 	ZFS_IOC_POOL_IMPORT,
723789Sahrens 	ZFS_IOC_POOL_EXPORT,
724789Sahrens 	ZFS_IOC_POOL_CONFIGS,
725789Sahrens 	ZFS_IOC_POOL_STATS,
726789Sahrens 	ZFS_IOC_POOL_TRYIMPORT,
72712296SLin.Ling@Sun.COM 	ZFS_IOC_POOL_SCAN,
728789Sahrens 	ZFS_IOC_POOL_FREEZE,
7291760Seschrock 	ZFS_IOC_POOL_UPGRADE,
7302926Sek110237 	ZFS_IOC_POOL_GET_HISTORY,
731789Sahrens 	ZFS_IOC_VDEV_ADD,
732789Sahrens 	ZFS_IOC_VDEV_REMOVE,
7334451Seschrock 	ZFS_IOC_VDEV_SET_STATE,
734789Sahrens 	ZFS_IOC_VDEV_ATTACH,
735789Sahrens 	ZFS_IOC_VDEV_DETACH,
7361354Seschrock 	ZFS_IOC_VDEV_SETPATH,
7379425SEric.Schrock@Sun.COM 	ZFS_IOC_VDEV_SETFRU,
738789Sahrens 	ZFS_IOC_OBJSET_STATS,
7395498Stimh 	ZFS_IOC_OBJSET_ZPLPROPS,
740789Sahrens 	ZFS_IOC_DATASET_LIST_NEXT,
741789Sahrens 	ZFS_IOC_SNAPSHOT_LIST_NEXT,
742789Sahrens 	ZFS_IOC_SET_PROP,
743789Sahrens 	ZFS_IOC_CREATE,
744789Sahrens 	ZFS_IOC_DESTROY,
745789Sahrens 	ZFS_IOC_ROLLBACK,
746789Sahrens 	ZFS_IOC_RENAME,
7475367Sahrens 	ZFS_IOC_RECV,
7485367Sahrens 	ZFS_IOC_SEND,
7491544Seschrock 	ZFS_IOC_INJECT_FAULT,
7501544Seschrock 	ZFS_IOC_CLEAR_FAULT,
7511544Seschrock 	ZFS_IOC_INJECT_LIST_NEXT,
7521544Seschrock 	ZFS_IOC_ERROR_LOG,
7531544Seschrock 	ZFS_IOC_CLEAR,
7542199Sahrens 	ZFS_IOC_PROMOTE,
7552199Sahrens 	ZFS_IOC_DESTROY_SNAPS,
7563444Sek110237 	ZFS_IOC_SNAPSHOT,
7573444Sek110237 	ZFS_IOC_DSOBJ_TO_DSNAME,
7583912Slling 	ZFS_IOC_OBJ_TO_PATH,
7593912Slling 	ZFS_IOC_POOL_SET_PROPS,
7604543Smarks 	ZFS_IOC_POOL_GET_PROPS,
7614543Smarks 	ZFS_IOC_SET_FSACL,
7624543Smarks 	ZFS_IOC_GET_FSACL,
7634849Sahrens 	ZFS_IOC_SHARE,
7648845Samw@Sun.COM 	ZFS_IOC_INHERIT_PROP,
7659396SMatthew.Ahrens@Sun.COM 	ZFS_IOC_SMB_ACL,
7669396SMatthew.Ahrens@Sun.COM 	ZFS_IOC_USERSPACE_ONE,
7679396SMatthew.Ahrens@Sun.COM 	ZFS_IOC_USERSPACE_MANY,
76810242Schris.kirby@sun.com 	ZFS_IOC_USERSPACE_UPGRADE,
76910242Schris.kirby@sun.com 	ZFS_IOC_HOLD,
77010242Schris.kirby@sun.com 	ZFS_IOC_RELEASE,
77111022STom.Erickson@Sun.COM 	ZFS_IOC_GET_HOLDS,
77211422SMark.Musante@Sun.COM 	ZFS_IOC_OBJSET_RECVD_PROPS,
77313043STim.Haley@Sun.COM 	ZFS_IOC_VDEV_SPLIT,
77413043STim.Haley@Sun.COM 	ZFS_IOC_NEXT_OBJ,
77513043STim.Haley@Sun.COM 	ZFS_IOC_DIFF,
77613043STim.Haley@Sun.COM 	ZFS_IOC_TMP_SNAPSHOT,
77713043STim.Haley@Sun.COM 	ZFS_IOC_OBJ_TO_STATS
778789Sahrens } zfs_ioc_t;
779789Sahrens 
7801544Seschrock /*
7811544Seschrock  * Internal SPA load state.  Used by FMA diagnosis engine.
7821544Seschrock  */
7831544Seschrock typedef enum {
78411149SGeorge.Wilson@Sun.COM 	SPA_LOAD_NONE,		/* no load in progress	*/
78511149SGeorge.Wilson@Sun.COM 	SPA_LOAD_OPEN,		/* normal open		*/
78611149SGeorge.Wilson@Sun.COM 	SPA_LOAD_IMPORT,	/* import in progress	*/
78710921STim.Haley@Sun.COM 	SPA_LOAD_TRYIMPORT,	/* tryimport in progress */
78811149SGeorge.Wilson@Sun.COM 	SPA_LOAD_RECOVER,	/* recovery requested	*/
78911149SGeorge.Wilson@Sun.COM 	SPA_LOAD_ERROR		/* load failed		*/
7901544Seschrock } spa_load_state_t;
7911544Seschrock 
7922676Seschrock /*
7932676Seschrock  * Bookmark name values.
7942676Seschrock  */
7953444Sek110237 #define	ZPOOL_ERR_LIST		"error list"
7962676Seschrock #define	ZPOOL_ERR_DATASET	"dataset"
7972676Seschrock #define	ZPOOL_ERR_OBJECT	"object"
7982676Seschrock 
7992926Sek110237 #define	HIS_MAX_RECORD_LEN	(MAXPATHLEN + MAXPATHLEN + 1)
8002926Sek110237 
8012926Sek110237 /*
8022926Sek110237  * The following are names used in the nvlist describing
8032926Sek110237  * the pool's history log.
8042926Sek110237  */
8052926Sek110237 #define	ZPOOL_HIST_RECORD	"history record"
8062926Sek110237 #define	ZPOOL_HIST_TIME		"history time"
8072926Sek110237 #define	ZPOOL_HIST_CMD		"history command"
8084543Smarks #define	ZPOOL_HIST_WHO		"history who"
8094543Smarks #define	ZPOOL_HIST_ZONE		"history zone"
8104543Smarks #define	ZPOOL_HIST_HOST		"history hostname"
8114543Smarks #define	ZPOOL_HIST_TXG		"history txg"
8124543Smarks #define	ZPOOL_HIST_INT_EVENT	"history internal event"
8134543Smarks #define	ZPOOL_HIST_INT_STR	"history internal str"
8142926Sek110237 
8154451Seschrock /*
8164451Seschrock  * Flags for ZFS_IOC_VDEV_SET_STATE
8174451Seschrock  */
8184451Seschrock #define	ZFS_ONLINE_CHECKREMOVE	0x1
8194451Seschrock #define	ZFS_ONLINE_UNSPARE	0x2
8204451Seschrock #define	ZFS_ONLINE_FORCEFAULT	0x4
8219816SGeorge.Wilson@Sun.COM #define	ZFS_ONLINE_EXPAND	0x8
8224451Seschrock #define	ZFS_OFFLINE_TEMPORARY	0x1
8234451Seschrock 
8244451Seschrock /*
82512949SGeorge.Wilson@Sun.COM  * Flags for ZFS_IOC_POOL_IMPORT
82612949SGeorge.Wilson@Sun.COM  */
82712949SGeorge.Wilson@Sun.COM #define	ZFS_IMPORT_NORMAL	0x0
82812949SGeorge.Wilson@Sun.COM #define	ZFS_IMPORT_VERBATIM	0x1
82912949SGeorge.Wilson@Sun.COM #define	ZFS_IMPORT_ANY_HOST	0x2
83012949SGeorge.Wilson@Sun.COM #define	ZFS_IMPORT_MISSING_LOG	0x4
831*13049SGeorge.Wilson@Sun.COM #define	ZFS_IMPORT_ONLY		0x8
83212949SGeorge.Wilson@Sun.COM 
83312949SGeorge.Wilson@Sun.COM /*
8344451Seschrock  * Sysevent payload members.  ZFS will generate the following sysevents with the
8354451Seschrock  * given payloads:
8364451Seschrock  *
8374451Seschrock  *	ESC_ZFS_RESILVER_START
8384451Seschrock  *	ESC_ZFS_RESILVER_END
8394451Seschrock  *	ESC_ZFS_POOL_DESTROY
8404451Seschrock  *
8414451Seschrock  *		ZFS_EV_POOL_NAME	DATA_TYPE_STRING
8424451Seschrock  *		ZFS_EV_POOL_GUID	DATA_TYPE_UINT64
8434451Seschrock  *
8444451Seschrock  *	ESC_ZFS_VDEV_REMOVE
8454451Seschrock  *	ESC_ZFS_VDEV_CLEAR
8464451Seschrock  *	ESC_ZFS_VDEV_CHECK
8474451Seschrock  *
8484451Seschrock  *		ZFS_EV_POOL_NAME	DATA_TYPE_STRING
8494451Seschrock  *		ZFS_EV_POOL_GUID	DATA_TYPE_UINT64
8504451Seschrock  *		ZFS_EV_VDEV_PATH	DATA_TYPE_STRING	(optional)
8514451Seschrock  *		ZFS_EV_VDEV_GUID	DATA_TYPE_UINT64
8524451Seschrock  */
8534451Seschrock #define	ZFS_EV_POOL_NAME	"pool_name"
8544451Seschrock #define	ZFS_EV_POOL_GUID	"pool_guid"
8554451Seschrock #define	ZFS_EV_VDEV_PATH	"vdev_path"
8564451Seschrock #define	ZFS_EV_VDEV_GUID	"vdev_guid"
8574451Seschrock 
8587046Sahrens /*
8597046Sahrens  * Note: This is encoded on-disk, so new events must be added to the
8607046Sahrens  * end, and unused events can not be removed.  Be sure to edit
86110685SGeorge.Wilson@Sun.COM  * libzfs_pool.c: hist_event_table[].
8627046Sahrens  */
8634543Smarks typedef enum history_internal_events {
8644543Smarks 	LOG_NO_EVENT = 0,
8654543Smarks 	LOG_POOL_CREATE,
8664543Smarks 	LOG_POOL_VDEV_ADD,
8674543Smarks 	LOG_POOL_REMOVE,
8684543Smarks 	LOG_POOL_DESTROY,
8694543Smarks 	LOG_POOL_EXPORT,
8704543Smarks 	LOG_POOL_IMPORT,
8714543Smarks 	LOG_POOL_VDEV_ATTACH,
8724543Smarks 	LOG_POOL_VDEV_REPLACE,
8734543Smarks 	LOG_POOL_VDEV_DETACH,
8744543Smarks 	LOG_POOL_VDEV_ONLINE,
8754543Smarks 	LOG_POOL_VDEV_OFFLINE,
8764543Smarks 	LOG_POOL_UPGRADE,
8774543Smarks 	LOG_POOL_CLEAR,
87812296SLin.Ling@Sun.COM 	LOG_POOL_SCAN,
8794543Smarks 	LOG_POOL_PROPSET,
8804543Smarks 	LOG_DS_CREATE,
8814543Smarks 	LOG_DS_CLONE,
8824543Smarks 	LOG_DS_DESTROY,
8834543Smarks 	LOG_DS_DESTROY_BEGIN,
8844543Smarks 	LOG_DS_INHERIT,
8854543Smarks 	LOG_DS_PROPSET,
8864543Smarks 	LOG_DS_QUOTA,
8874543Smarks 	LOG_DS_PERM_UPDATE,
8884543Smarks 	LOG_DS_PERM_REMOVE,
8894543Smarks 	LOG_DS_PERM_WHO_REMOVE,
8904543Smarks 	LOG_DS_PROMOTE,
8914543Smarks 	LOG_DS_RECEIVE,
8924543Smarks 	LOG_DS_RENAME,
8934543Smarks 	LOG_DS_RESERVATION,
8944543Smarks 	LOG_DS_REPLAY_INC_SYNC,
8954543Smarks 	LOG_DS_REPLAY_FULL_SYNC,
8964543Smarks 	LOG_DS_ROLLBACK,
8974543Smarks 	LOG_DS_SNAPSHOT,
8984577Sahrens 	LOG_DS_UPGRADE,
8995378Sck153898 	LOG_DS_REFQUOTA,
9005378Sck153898 	LOG_DS_REFRESERV,
90112296SLin.Ling@Sun.COM 	LOG_POOL_SCAN_DONE,
90210242Schris.kirby@sun.com 	LOG_DS_USER_HOLD,
90310242Schris.kirby@sun.com 	LOG_DS_USER_RELEASE,
90411422SMark.Musante@Sun.COM 	LOG_POOL_SPLIT,
9054543Smarks 	LOG_END
9064543Smarks } history_internal_events_t;
9074543Smarks 
908789Sahrens #ifdef	__cplusplus
909789Sahrens }
910789Sahrens #endif
911789Sahrens 
912789Sahrens #endif	/* _SYS_FS_ZFS_H */
913