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