1168404Spjd/* 2168404Spjd * CDDL HEADER START 3168404Spjd * 4168404Spjd * The contents of this file are subject to the terms of the 5168404Spjd * Common Development and Distribution License (the "License"). 6168404Spjd * You may not use this file except in compliance with the License. 7168404Spjd * 8168404Spjd * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9168404Spjd * or http://www.opensolaris.org/os/licensing. 10168404Spjd * See the License for the specific language governing permissions 11168404Spjd * and limitations under the License. 12168404Spjd * 13168404Spjd * When distributing Covered Code, include this CDDL HEADER in each 14168404Spjd * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15168404Spjd * If applicable, add the following below this CDDL HEADER, with the 16168404Spjd * fields enclosed by brackets "[]" replaced with your own identifying 17168404Spjd * information: Portions Copyright [yyyy] [name of copyright owner] 18168404Spjd * 19168404Spjd * CDDL HEADER END 20168404Spjd */ 21219089Spjd 22168404Spjd/* 23219089Spjd * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. 24268647Sdelphij * Copyright (c) 2011, 2014 by Delphix. All rights reserved. 25228103Smm * Copyright 2011 Nexenta Systems, Inc. All rights reserved. 26265744Sdelphij * Copyright (c) 2013, Joyent, Inc. All rights reserved. 27235222Smm * Copyright (c) 2012, Martin Matuska <mm@FreeBSD.org>. All rights reserved. 28297112Smav * Copyright (c) 2014 Integros [integros.com] 29168404Spjd */ 30168404Spjd 31219089Spjd/* Portions Copyright 2010 Robert Milkowski */ 32219089Spjd 33168404Spjd#ifndef _SYS_FS_ZFS_H 34168404Spjd#define _SYS_FS_ZFS_H 35168404Spjd 36168404Spjd#include <sys/types.h> 37168404Spjd#include <sys/ioccom.h> 38185029Spjd#include <sys/time.h> 39168404Spjd 40168404Spjd#ifdef __cplusplus 41168404Spjdextern "C" { 42168404Spjd#endif 43168404Spjd 44168404Spjd/* 45168404Spjd * Types and constants shared between userland and the kernel. 46168404Spjd */ 47168404Spjd 48168404Spjd/* 49168404Spjd * Each dataset can be one of the following types. These constants can be 50168404Spjd * combined into masks that can be passed to various functions. 51168404Spjd */ 52168404Spjdtypedef enum { 53263407Sdelphij ZFS_TYPE_FILESYSTEM = (1 << 0), 54263407Sdelphij ZFS_TYPE_SNAPSHOT = (1 << 1), 55263407Sdelphij ZFS_TYPE_VOLUME = (1 << 2), 56263407Sdelphij ZFS_TYPE_POOL = (1 << 3), 57263407Sdelphij ZFS_TYPE_BOOKMARK = (1 << 4) 58168404Spjd} zfs_type_t; 59168404Spjd 60300028Savg/* 61300028Savg * NB: lzc_dataset_type should be updated whenever a new objset type is added, 62300028Savg * if it represents a real type of a dataset that can be created from userland. 63300028Savg */ 64248571Smmtypedef enum dmu_objset_type { 65248571Smm DMU_OST_NONE, 66248571Smm DMU_OST_META, 67248571Smm DMU_OST_ZFS, 68248571Smm DMU_OST_ZVOL, 69248571Smm DMU_OST_OTHER, /* For testing only! */ 70248571Smm DMU_OST_ANY, /* Be careful! */ 71248571Smm DMU_OST_NUMTYPES 72248571Smm} dmu_objset_type_t; 73248571Smm 74185029Spjd#define ZFS_TYPE_DATASET \ 75168404Spjd (ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME | ZFS_TYPE_SNAPSHOT) 76168404Spjd 77307122Smav/* 78307122Smav * All of these include the terminating NUL byte. 79307122Smav */ 80219089Spjd#define ZAP_MAXNAMELEN 256 81219089Spjd#define ZAP_MAXVALUELEN (1024 * 8) 82219089Spjd#define ZAP_OLDMAXVALUELEN 1024 83307122Smav#define ZFS_MAX_DATASET_NAME_LEN 256 84219089Spjd 85168404Spjd/* 86185029Spjd * Dataset properties are identified by these constants and must be added to 87185029Spjd * the end of this list to ensure that external consumers are not affected 88185029Spjd * by the change. If you make any changes to this list, be sure to update 89168404Spjd * the property table in usr/src/common/zfs/zfs_prop.c. 90168404Spjd */ 91168404Spjdtypedef enum { 92168404Spjd ZFS_PROP_TYPE, 93168404Spjd ZFS_PROP_CREATION, 94168404Spjd ZFS_PROP_USED, 95168404Spjd ZFS_PROP_AVAILABLE, 96168404Spjd ZFS_PROP_REFERENCED, 97168404Spjd ZFS_PROP_COMPRESSRATIO, 98168404Spjd ZFS_PROP_MOUNTED, 99168404Spjd ZFS_PROP_ORIGIN, 100168404Spjd ZFS_PROP_QUOTA, 101168404Spjd ZFS_PROP_RESERVATION, 102168404Spjd ZFS_PROP_VOLSIZE, 103168404Spjd ZFS_PROP_VOLBLOCKSIZE, 104168404Spjd ZFS_PROP_RECORDSIZE, 105168404Spjd ZFS_PROP_MOUNTPOINT, 106168404Spjd ZFS_PROP_SHARENFS, 107168404Spjd ZFS_PROP_CHECKSUM, 108168404Spjd ZFS_PROP_COMPRESSION, 109168404Spjd ZFS_PROP_ATIME, 110168404Spjd ZFS_PROP_DEVICES, 111168404Spjd ZFS_PROP_EXEC, 112168404Spjd ZFS_PROP_SETUID, 113168404Spjd ZFS_PROP_READONLY, 114168404Spjd ZFS_PROP_ZONED, 115168404Spjd ZFS_PROP_SNAPDIR, 116224174Smm ZFS_PROP_ACLMODE, 117168404Spjd ZFS_PROP_ACLINHERIT, 118168404Spjd ZFS_PROP_CREATETXG, /* not exposed to the user */ 119168404Spjd ZFS_PROP_NAME, /* not exposed to the user */ 120168404Spjd ZFS_PROP_CANMOUNT, 121168404Spjd ZFS_PROP_ISCSIOPTIONS, /* not exposed to the user */ 122168404Spjd ZFS_PROP_XATTR, 123168404Spjd ZFS_PROP_NUMCLONES, /* not exposed to the user */ 124168404Spjd ZFS_PROP_COPIES, 125185029Spjd ZFS_PROP_VERSION, 126185029Spjd ZFS_PROP_UTF8ONLY, 127185029Spjd ZFS_PROP_NORMALIZE, 128185029Spjd ZFS_PROP_CASE, 129185029Spjd ZFS_PROP_VSCAN, 130185029Spjd ZFS_PROP_NBMAND, 131185029Spjd ZFS_PROP_SHARESMB, 132185029Spjd ZFS_PROP_REFQUOTA, 133185029Spjd ZFS_PROP_REFRESERVATION, 134185029Spjd ZFS_PROP_GUID, 135185029Spjd ZFS_PROP_PRIMARYCACHE, 136185029Spjd ZFS_PROP_SECONDARYCACHE, 137185029Spjd ZFS_PROP_USEDSNAP, 138185029Spjd ZFS_PROP_USEDDS, 139185029Spjd ZFS_PROP_USEDCHILD, 140185029Spjd ZFS_PROP_USEDREFRESERV, 141209962Smm ZFS_PROP_USERACCOUNTING, /* not exposed to the user */ 142219089Spjd ZFS_PROP_STMF_SHAREINFO, /* not exposed to the user */ 143219089Spjd ZFS_PROP_DEFER_DESTROY, 144219089Spjd ZFS_PROP_USERREFS, 145219089Spjd ZFS_PROP_LOGBIAS, 146219089Spjd ZFS_PROP_UNIQUE, /* not exposed to the user */ 147219089Spjd ZFS_PROP_OBJSETID, /* not exposed to the user */ 148219089Spjd ZFS_PROP_DEDUP, 149219089Spjd ZFS_PROP_MLSLABEL, 150219089Spjd ZFS_PROP_SYNC, 151223623Smm ZFS_PROP_REFRATIO, 152228103Smm ZFS_PROP_WRITTEN, 153228103Smm ZFS_PROP_CLONES, 154247585Smm ZFS_PROP_LOGICALUSED, 155247585Smm ZFS_PROP_LOGICALREFERENCED, 156253819Sdelphij ZFS_PROP_INCONSISTENT, /* not exposed to the user */ 157265678Smav ZFS_PROP_VOLMODE, 158265744Sdelphij ZFS_PROP_FILESYSTEM_LIMIT, 159265744Sdelphij ZFS_PROP_SNAPSHOT_LIMIT, 160265744Sdelphij ZFS_PROP_FILESYSTEM_COUNT, 161265744Sdelphij ZFS_PROP_SNAPSHOT_COUNT, 162268647Sdelphij ZFS_PROP_REDUNDANT_METADATA, 163268659Sdelphij ZFS_PROP_PREV_SNAP, 164290756Smav ZFS_PROP_RECEIVE_RESUME_TOKEN, 165185029Spjd ZFS_NUM_PROPS 166168404Spjd} zfs_prop_t; 167168404Spjd 168209962Smmtypedef enum { 169209962Smm ZFS_PROP_USERUSED, 170209962Smm ZFS_PROP_USERQUOTA, 171209962Smm ZFS_PROP_GROUPUSED, 172209962Smm ZFS_PROP_GROUPQUOTA, 173209962Smm ZFS_NUM_USERQUOTA_PROPS 174209962Smm} zfs_userquota_prop_t; 175209962Smm 176209962Smmextern const char *zfs_userquota_prop_prefixes[ZFS_NUM_USERQUOTA_PROPS]; 177209962Smm 178185029Spjd/* 179185029Spjd * Pool properties are identified by these constants and must be added to the 180185029Spjd * end of this list to ensure that external consumers are not affected 181185029Spjd * by the change. If you make any changes to this list, be sure to update 182185029Spjd * the property table in usr/src/common/zfs/zpool_prop.c. 183185029Spjd */ 184185029Spjdtypedef enum { 185185029Spjd ZPOOL_PROP_NAME, 186185029Spjd ZPOOL_PROP_SIZE, 187185029Spjd ZPOOL_PROP_CAPACITY, 188185029Spjd ZPOOL_PROP_ALTROOT, 189185029Spjd ZPOOL_PROP_HEALTH, 190185029Spjd ZPOOL_PROP_GUID, 191185029Spjd ZPOOL_PROP_VERSION, 192185029Spjd ZPOOL_PROP_BOOTFS, 193185029Spjd ZPOOL_PROP_DELEGATION, 194185029Spjd ZPOOL_PROP_AUTOREPLACE, 195185029Spjd ZPOOL_PROP_CACHEFILE, 196185029Spjd ZPOOL_PROP_FAILUREMODE, 197185029Spjd ZPOOL_PROP_LISTSNAPS, 198219089Spjd ZPOOL_PROP_AUTOEXPAND, 199219089Spjd ZPOOL_PROP_DEDUPDITTO, 200219089Spjd ZPOOL_PROP_DEDUPRATIO, 201219089Spjd ZPOOL_PROP_FREE, 202219089Spjd ZPOOL_PROP_ALLOCATED, 203219089Spjd ZPOOL_PROP_READONLY, 204228103Smm ZPOOL_PROP_COMMENT, 205236155Smm ZPOOL_PROP_EXPANDSZ, 206236884Smm ZPOOL_PROP_FREEING, 207269773Sdelphij ZPOOL_PROP_FRAGMENTATION, 208268650Sdelphij ZPOOL_PROP_LEAKED, 209276081Sdelphij ZPOOL_PROP_MAXBLOCKSIZE, 210333196Savg ZPOOL_PROP_TNAME, 211185029Spjd ZPOOL_NUM_PROPS 212185029Spjd} zpool_prop_t; 213168404Spjd 214228103Smm/* Small enough to not hog a whole line of printout in zpool(1M). */ 215228103Smm#define ZPROP_MAX_COMMENT 32 216228103Smm 217185029Spjd#define ZPROP_CONT -2 218185029Spjd#define ZPROP_INVAL -1 219168404Spjd 220185029Spjd#define ZPROP_VALUE "value" 221185029Spjd#define ZPROP_SOURCE "source" 222185029Spjd 223168404Spjdtypedef enum { 224185029Spjd ZPROP_SRC_NONE = 0x1, 225185029Spjd ZPROP_SRC_DEFAULT = 0x2, 226185029Spjd ZPROP_SRC_TEMPORARY = 0x4, 227185029Spjd ZPROP_SRC_LOCAL = 0x8, 228219089Spjd ZPROP_SRC_INHERITED = 0x10, 229219089Spjd ZPROP_SRC_RECEIVED = 0x20 230185029Spjd} zprop_source_t; 231168404Spjd 232219089Spjd#define ZPROP_SRC_ALL 0x3f 233168404Spjd 234219089Spjd#define ZPROP_SOURCE_VAL_RECVD "$recvd" 235219089Spjd#define ZPROP_N_MORE_ERRORS "N_MORE_ERRORS" 236219089Spjd/* 237219089Spjd * Dataset flag implemented as a special entry in the props zap object 238219089Spjd * indicating that the dataset has received properties on or after 239219089Spjd * SPA_VERSION_RECVD_PROPS. The first such receive blows away local properties 240219089Spjd * just as it did in earlier versions, and thereafter, local properties are 241219089Spjd * preserved. 242219089Spjd */ 243219089Spjd#define ZPROP_HAS_RECVD "$hasrecvd" 244219089Spjd 245219089Spjdtypedef enum { 246219089Spjd ZPROP_ERR_NOCLEAR = 0x1, /* failure to clear existing props */ 247219089Spjd ZPROP_ERR_NORESTORE = 0x2 /* failure to restore props on error */ 248219089Spjd} zprop_errflags_t; 249219089Spjd 250185029Spjdtypedef int (*zprop_func)(int, void *); 251185029Spjd 252168404Spjd/* 253185029Spjd * Properties to be set on the root file system of a new pool 254185029Spjd * are stuffed into their own nvlist, which is then included in 255185029Spjd * the properties nvlist with the pool properties. 256168404Spjd */ 257185029Spjd#define ZPOOL_ROOTFS_PROPS "root-props-nvl" 258185029Spjd 259185029Spjd/* 260185029Spjd * Dataset property functions shared between libzfs and kernel. 261185029Spjd */ 262185029Spjdconst char *zfs_prop_default_string(zfs_prop_t); 263185029Spjduint64_t zfs_prop_default_numeric(zfs_prop_t); 264185029Spjdboolean_t zfs_prop_readonly(zfs_prop_t); 265185029Spjdboolean_t zfs_prop_inheritable(zfs_prop_t); 266185029Spjdboolean_t zfs_prop_setonce(zfs_prop_t); 267185029Spjdconst char *zfs_prop_to_name(zfs_prop_t); 268168404Spjdzfs_prop_t zfs_name_to_prop(const char *); 269168404Spjdboolean_t zfs_prop_user(const char *); 270219089Spjdboolean_t zfs_prop_userquota(const char *); 271185029Spjdint zfs_prop_index_to_string(zfs_prop_t, uint64_t, const char **); 272168404Spjdint zfs_prop_string_to_index(zfs_prop_t, const char *, uint64_t *); 273219089Spjduint64_t zfs_prop_random_value(zfs_prop_t, uint64_t seed); 274185029Spjdboolean_t zfs_prop_valid_for_type(int, zfs_type_t); 275168404Spjd 276168404Spjd/* 277185029Spjd * Pool property functions shared between libzfs and kernel. 278168404Spjd */ 279185029Spjdzpool_prop_t zpool_name_to_prop(const char *); 280185029Spjdconst char *zpool_prop_to_name(zpool_prop_t); 281185029Spjdconst char *zpool_prop_default_string(zpool_prop_t); 282185029Spjduint64_t zpool_prop_default_numeric(zpool_prop_t); 283185029Spjdboolean_t zpool_prop_readonly(zpool_prop_t); 284236884Smmboolean_t zpool_prop_feature(const char *); 285236884Smmboolean_t zpool_prop_unsupported(const char *name); 286185029Spjdint zpool_prop_index_to_string(zpool_prop_t, uint64_t, const char **); 287185029Spjdint zpool_prop_string_to_index(zpool_prop_t, const char *, uint64_t *); 288219089Spjduint64_t zpool_prop_random_value(zpool_prop_t, uint64_t seed); 289168404Spjd 290168404Spjd/* 291185029Spjd * Definitions for the Delegation. 292185029Spjd */ 293185029Spjdtypedef enum { 294185029Spjd ZFS_DELEG_WHO_UNKNOWN = 0, 295185029Spjd ZFS_DELEG_USER = 'u', 296185029Spjd ZFS_DELEG_USER_SETS = 'U', 297185029Spjd ZFS_DELEG_GROUP = 'g', 298185029Spjd ZFS_DELEG_GROUP_SETS = 'G', 299185029Spjd ZFS_DELEG_EVERYONE = 'e', 300185029Spjd ZFS_DELEG_EVERYONE_SETS = 'E', 301185029Spjd ZFS_DELEG_CREATE = 'c', 302185029Spjd ZFS_DELEG_CREATE_SETS = 'C', 303185029Spjd ZFS_DELEG_NAMED_SET = 's', 304185029Spjd ZFS_DELEG_NAMED_SET_SETS = 'S' 305185029Spjd} zfs_deleg_who_type_t; 306185029Spjd 307185029Spjdtypedef enum { 308185029Spjd ZFS_DELEG_NONE = 0, 309185029Spjd ZFS_DELEG_PERM_LOCAL = 1, 310185029Spjd ZFS_DELEG_PERM_DESCENDENT = 2, 311185029Spjd ZFS_DELEG_PERM_LOCALDESCENDENT = 3, 312185029Spjd ZFS_DELEG_PERM_CREATE = 4 313185029Spjd} zfs_deleg_inherit_t; 314185029Spjd 315185029Spjd#define ZFS_DELEG_PERM_UID "uid" 316185029Spjd#define ZFS_DELEG_PERM_GID "gid" 317185029Spjd#define ZFS_DELEG_PERM_GROUPS "groups" 318185029Spjd 319219089Spjd#define ZFS_MLSLABEL_DEFAULT "none" 320219089Spjd 321209962Smm#define ZFS_SMB_ACL_SRC "src" 322209962Smm#define ZFS_SMB_ACL_TARGET "target" 323209962Smm 324185029Spjdtypedef enum { 325185029Spjd ZFS_CANMOUNT_OFF = 0, 326185029Spjd ZFS_CANMOUNT_ON = 1, 327185029Spjd ZFS_CANMOUNT_NOAUTO = 2 328185029Spjd} zfs_canmount_type_t; 329185029Spjd 330219089Spjdtypedef enum { 331219089Spjd ZFS_LOGBIAS_LATENCY = 0, 332219089Spjd ZFS_LOGBIAS_THROUGHPUT = 1 333219089Spjd} zfs_logbias_op_t; 334219089Spjd 335185029Spjdtypedef enum zfs_share_op { 336185029Spjd ZFS_SHARE_NFS = 0, 337185029Spjd ZFS_UNSHARE_NFS = 1, 338185029Spjd ZFS_SHARE_SMB = 2, 339185029Spjd ZFS_UNSHARE_SMB = 3 340185029Spjd} zfs_share_op_t; 341185029Spjd 342209962Smmtypedef enum zfs_smb_acl_op { 343209962Smm ZFS_SMB_ACL_ADD, 344209962Smm ZFS_SMB_ACL_REMOVE, 345209962Smm ZFS_SMB_ACL_RENAME, 346209962Smm ZFS_SMB_ACL_PURGE 347209962Smm} zfs_smb_acl_op_t; 348209962Smm 349185029Spjdtypedef enum zfs_cache_type { 350185029Spjd ZFS_CACHE_NONE = 0, 351185029Spjd ZFS_CACHE_METADATA = 1, 352185029Spjd ZFS_CACHE_ALL = 2 353185029Spjd} zfs_cache_type_t; 354185029Spjd 355219089Spjdtypedef enum { 356219089Spjd ZFS_SYNC_STANDARD = 0, 357219089Spjd ZFS_SYNC_ALWAYS = 1, 358219089Spjd ZFS_SYNC_DISABLED = 2 359219089Spjd} zfs_sync_type_t; 360185029Spjd 361265678Smavtypedef enum { 362265678Smav ZFS_VOLMODE_DEFAULT = 0, 363265678Smav ZFS_VOLMODE_GEOM = 1, 364265678Smav ZFS_VOLMODE_DEV = 2, 365265678Smav ZFS_VOLMODE_NONE = 3 366265678Smav} zfs_volmode_t; 367219089Spjd 368268647Sdelphijtypedef enum { 369268647Sdelphij ZFS_REDUNDANT_METADATA_ALL, 370268647Sdelphij ZFS_REDUNDANT_METADATA_MOST 371268647Sdelphij} zfs_redundant_metadata_type_t; 372268647Sdelphij 373185029Spjd/* 374168404Spjd * On-disk version number. 375168404Spjd */ 376185029Spjd#define SPA_VERSION_1 1ULL 377185029Spjd#define SPA_VERSION_2 2ULL 378185029Spjd#define SPA_VERSION_3 3ULL 379185029Spjd#define SPA_VERSION_4 4ULL 380185029Spjd#define SPA_VERSION_5 5ULL 381185029Spjd#define SPA_VERSION_6 6ULL 382185029Spjd#define SPA_VERSION_7 7ULL 383185029Spjd#define SPA_VERSION_8 8ULL 384185029Spjd#define SPA_VERSION_9 9ULL 385185029Spjd#define SPA_VERSION_10 10ULL 386185029Spjd#define SPA_VERSION_11 11ULL 387185029Spjd#define SPA_VERSION_12 12ULL 388185029Spjd#define SPA_VERSION_13 13ULL 389201143Sdelphij#define SPA_VERSION_14 14ULL 390209962Smm#define SPA_VERSION_15 15ULL 391219089Spjd#define SPA_VERSION_16 16ULL 392219089Spjd#define SPA_VERSION_17 17ULL 393219089Spjd#define SPA_VERSION_18 18ULL 394219089Spjd#define SPA_VERSION_19 19ULL 395219089Spjd#define SPA_VERSION_20 20ULL 396219089Spjd#define SPA_VERSION_21 21ULL 397219089Spjd#define SPA_VERSION_22 22ULL 398219089Spjd#define SPA_VERSION_23 23ULL 399219089Spjd#define SPA_VERSION_24 24ULL 400219089Spjd#define SPA_VERSION_25 25ULL 401219089Spjd#define SPA_VERSION_26 26ULL 402219089Spjd#define SPA_VERSION_27 27ULL 403219089Spjd#define SPA_VERSION_28 28ULL 404236884Smm#define SPA_VERSION_5000 5000ULL 405219089Spjd 406168404Spjd/* 407185029Spjd * When bumping up SPA_VERSION, make sure GRUB ZFS understands the on-disk 408219089Spjd * format change. Go to usr/src/grub/grub-0.97/stage2/{zfs-include/, fsys_zfs*}, 409209962Smm * and do the appropriate changes. Also bump the version number in 410209962Smm * usr/src/grub/capability. 411168404Spjd */ 412236884Smm#define SPA_VERSION SPA_VERSION_5000 413236884Smm#define SPA_VERSION_STRING "5000" 414168404Spjd 415168404Spjd/* 416185029Spjd * Symbolic names for the changes that caused a SPA_VERSION switch. 417168404Spjd * Used in the code when checking for presence or absence of a feature. 418168404Spjd * Feel free to define multiple symbolic names for each version if there 419168404Spjd * were multiple changes to on-disk structures during that version. 420168404Spjd * 421185029Spjd * NOTE: When checking the current SPA_VERSION in your code, be sure 422168404Spjd * to use spa_version() since it reports the version of the 423168404Spjd * last synced uberblock. Checking the in-flight version can 424168404Spjd * be dangerous in some cases. 425168404Spjd */ 426185029Spjd#define SPA_VERSION_INITIAL SPA_VERSION_1 427185029Spjd#define SPA_VERSION_DITTO_BLOCKS SPA_VERSION_2 428185029Spjd#define SPA_VERSION_SPARES SPA_VERSION_3 429219089Spjd#define SPA_VERSION_RAIDZ2 SPA_VERSION_3 430219089Spjd#define SPA_VERSION_BPOBJ_ACCOUNT SPA_VERSION_3 431185029Spjd#define SPA_VERSION_RAIDZ_DEFLATE SPA_VERSION_3 432185029Spjd#define SPA_VERSION_DNODE_BYTES SPA_VERSION_3 433185029Spjd#define SPA_VERSION_ZPOOL_HISTORY SPA_VERSION_4 434185029Spjd#define SPA_VERSION_GZIP_COMPRESSION SPA_VERSION_5 435185029Spjd#define SPA_VERSION_BOOTFS SPA_VERSION_6 436185029Spjd#define SPA_VERSION_SLOGS SPA_VERSION_7 437185029Spjd#define SPA_VERSION_DELEGATED_PERMS SPA_VERSION_8 438185029Spjd#define SPA_VERSION_FUID SPA_VERSION_9 439185029Spjd#define SPA_VERSION_REFRESERVATION SPA_VERSION_9 440185029Spjd#define SPA_VERSION_REFQUOTA SPA_VERSION_9 441185029Spjd#define SPA_VERSION_UNIQUE_ACCURATE SPA_VERSION_9 442185029Spjd#define SPA_VERSION_L2CACHE SPA_VERSION_10 443185029Spjd#define SPA_VERSION_NEXT_CLONES SPA_VERSION_11 444185029Spjd#define SPA_VERSION_ORIGIN SPA_VERSION_11 445185029Spjd#define SPA_VERSION_DSL_SCRUB SPA_VERSION_11 446185029Spjd#define SPA_VERSION_SNAP_PROPS SPA_VERSION_12 447185029Spjd#define SPA_VERSION_USED_BREAKDOWN SPA_VERSION_13 448201143Sdelphij#define SPA_VERSION_PASSTHROUGH_X SPA_VERSION_14 449209962Smm#define SPA_VERSION_USERSPACE SPA_VERSION_15 450219089Spjd#define SPA_VERSION_STMF_PROP SPA_VERSION_16 451219089Spjd#define SPA_VERSION_RAIDZ3 SPA_VERSION_17 452219089Spjd#define SPA_VERSION_USERREFS SPA_VERSION_18 453219089Spjd#define SPA_VERSION_HOLES SPA_VERSION_19 454219089Spjd#define SPA_VERSION_ZLE_COMPRESSION SPA_VERSION_20 455219089Spjd#define SPA_VERSION_DEDUP SPA_VERSION_21 456219089Spjd#define SPA_VERSION_RECVD_PROPS SPA_VERSION_22 457219089Spjd#define SPA_VERSION_SLIM_ZIL SPA_VERSION_23 458219089Spjd#define SPA_VERSION_SA SPA_VERSION_24 459219089Spjd#define SPA_VERSION_SCAN SPA_VERSION_25 460219089Spjd#define SPA_VERSION_DIR_CLONES SPA_VERSION_26 461219089Spjd#define SPA_VERSION_DEADLISTS SPA_VERSION_26 462219089Spjd#define SPA_VERSION_FAST_SNAP SPA_VERSION_27 463219089Spjd#define SPA_VERSION_MULTI_REPLACE SPA_VERSION_28 464236884Smm#define SPA_VERSION_BEFORE_FEATURES SPA_VERSION_28 465236884Smm#define SPA_VERSION_FEATURES SPA_VERSION_5000 466168404Spjd 467236884Smm#define SPA_VERSION_IS_SUPPORTED(v) \ 468236884Smm (((v) >= SPA_VERSION_INITIAL && (v) <= SPA_VERSION_BEFORE_FEATURES) || \ 469236884Smm ((v) >= SPA_VERSION_FEATURES && (v) <= SPA_VERSION)) 470236884Smm 471168404Spjd/* 472185029Spjd * ZPL version - rev'd whenever an incompatible on-disk format change 473185029Spjd * occurs. This is independent of SPA/DMU/ZAP versioning. You must 474185029Spjd * also update the version_table[] and help message in zfs_prop.c. 475185029Spjd * 476185029Spjd * When changing, be sure to teach GRUB how to read the new format! 477219089Spjd * See usr/src/grub/grub-0.97/stage2/{zfs-include/,fsys_zfs*} 478185029Spjd */ 479185029Spjd#define ZPL_VERSION_1 1ULL 480185029Spjd#define ZPL_VERSION_2 2ULL 481185029Spjd#define ZPL_VERSION_3 3ULL 482209962Smm#define ZPL_VERSION_4 4ULL 483219089Spjd#define ZPL_VERSION_5 5ULL 484219089Spjd#define ZPL_VERSION ZPL_VERSION_5 485219089Spjd#define ZPL_VERSION_STRING "5" 486185029Spjd 487185029Spjd#define ZPL_VERSION_INITIAL ZPL_VERSION_1 488185029Spjd#define ZPL_VERSION_DIRENT_TYPE ZPL_VERSION_2 489185029Spjd#define ZPL_VERSION_FUID ZPL_VERSION_3 490185029Spjd#define ZPL_VERSION_NORMALIZATION ZPL_VERSION_3 491185029Spjd#define ZPL_VERSION_SYSATTR ZPL_VERSION_3 492209962Smm#define ZPL_VERSION_USERSPACE ZPL_VERSION_4 493219089Spjd#define ZPL_VERSION_SA ZPL_VERSION_5 494185029Spjd 495219089Spjd/* Rewind request information */ 496219089Spjd#define ZPOOL_NO_REWIND 1 /* No policy - default behavior */ 497219089Spjd#define ZPOOL_NEVER_REWIND 2 /* Do not search for best txg or rewind */ 498219089Spjd#define ZPOOL_TRY_REWIND 4 /* Search for best txg, but do not rewind */ 499219089Spjd#define ZPOOL_DO_REWIND 8 /* Rewind to best txg w/in deferred frees */ 500219089Spjd#define ZPOOL_EXTREME_REWIND 16 /* Allow extreme measures to find best txg */ 501219089Spjd#define ZPOOL_REWIND_MASK 28 /* All the possible rewind bits */ 502219089Spjd#define ZPOOL_REWIND_POLICIES 31 /* All the possible policy bits */ 503219089Spjd 504219089Spjdtypedef struct zpool_rewind_policy { 505219089Spjd uint32_t zrp_request; /* rewind behavior requested */ 506219089Spjd uint64_t zrp_maxmeta; /* max acceptable meta-data errors */ 507219089Spjd uint64_t zrp_maxdata; /* max acceptable data errors */ 508219089Spjd uint64_t zrp_txg; /* specific txg to load */ 509219089Spjd} zpool_rewind_policy_t; 510219089Spjd 511185029Spjd/* 512168404Spjd * The following are configuration names used in the nvlist describing a pool's 513168404Spjd * configuration. 514168404Spjd */ 515168404Spjd#define ZPOOL_CONFIG_VERSION "version" 516168404Spjd#define ZPOOL_CONFIG_POOL_NAME "name" 517168404Spjd#define ZPOOL_CONFIG_POOL_STATE "state" 518168404Spjd#define ZPOOL_CONFIG_POOL_TXG "txg" 519168404Spjd#define ZPOOL_CONFIG_POOL_GUID "pool_guid" 520168404Spjd#define ZPOOL_CONFIG_CREATE_TXG "create_txg" 521168404Spjd#define ZPOOL_CONFIG_TOP_GUID "top_guid" 522168404Spjd#define ZPOOL_CONFIG_VDEV_TREE "vdev_tree" 523168404Spjd#define ZPOOL_CONFIG_TYPE "type" 524168404Spjd#define ZPOOL_CONFIG_CHILDREN "children" 525168404Spjd#define ZPOOL_CONFIG_ID "id" 526168404Spjd#define ZPOOL_CONFIG_GUID "guid" 527168404Spjd#define ZPOOL_CONFIG_PATH "path" 528168404Spjd#define ZPOOL_CONFIG_DEVID "devid" 529168404Spjd#define ZPOOL_CONFIG_METASLAB_ARRAY "metaslab_array" 530168404Spjd#define ZPOOL_CONFIG_METASLAB_SHIFT "metaslab_shift" 531168404Spjd#define ZPOOL_CONFIG_ASHIFT "ashift" 532168404Spjd#define ZPOOL_CONFIG_ASIZE "asize" 533168404Spjd#define ZPOOL_CONFIG_DTL "DTL" 534219089Spjd#define ZPOOL_CONFIG_SCAN_STATS "scan_stats" /* not stored on disk */ 535219089Spjd#define ZPOOL_CONFIG_VDEV_STATS "vdev_stats" /* not stored on disk */ 536168404Spjd#define ZPOOL_CONFIG_WHOLE_DISK "whole_disk" 537168404Spjd#define ZPOOL_CONFIG_ERRCOUNT "error_count" 538168404Spjd#define ZPOOL_CONFIG_NOT_PRESENT "not_present" 539168404Spjd#define ZPOOL_CONFIG_SPARES "spares" 540168404Spjd#define ZPOOL_CONFIG_IS_SPARE "is_spare" 541168404Spjd#define ZPOOL_CONFIG_NPARITY "nparity" 542168498Spjd#define ZPOOL_CONFIG_HOSTID "hostid" 543168498Spjd#define ZPOOL_CONFIG_HOSTNAME "hostname" 544219089Spjd#define ZPOOL_CONFIG_LOADED_TIME "initial_load_time" 545185029Spjd#define ZPOOL_CONFIG_UNSPARE "unspare" 546185029Spjd#define ZPOOL_CONFIG_PHYS_PATH "phys_path" 547185029Spjd#define ZPOOL_CONFIG_IS_LOG "is_log" 548185029Spjd#define ZPOOL_CONFIG_L2CACHE "l2cache" 549219089Spjd#define ZPOOL_CONFIG_HOLE_ARRAY "hole_array" 550219089Spjd#define ZPOOL_CONFIG_VDEV_CHILDREN "vdev_children" 551219089Spjd#define ZPOOL_CONFIG_IS_HOLE "is_hole" 552219089Spjd#define ZPOOL_CONFIG_DDT_HISTOGRAM "ddt_histogram" 553219089Spjd#define ZPOOL_CONFIG_DDT_OBJ_STATS "ddt_object_stats" 554219089Spjd#define ZPOOL_CONFIG_DDT_STATS "ddt_stats" 555219089Spjd#define ZPOOL_CONFIG_SPLIT "splitcfg" 556219089Spjd#define ZPOOL_CONFIG_ORIG_GUID "orig_guid" 557219089Spjd#define ZPOOL_CONFIG_SPLIT_GUID "split_guid" 558219089Spjd#define ZPOOL_CONFIG_SPLIT_LIST "guid_list" 559219089Spjd#define ZPOOL_CONFIG_REMOVING "removing" 560254112Sdelphij#define ZPOOL_CONFIG_RESILVER_TXG "resilver_txg" 561228103Smm#define ZPOOL_CONFIG_COMMENT "comment" 562185029Spjd#define ZPOOL_CONFIG_SUSPENDED "suspended" /* not stored on disk */ 563185029Spjd#define ZPOOL_CONFIG_TIMESTAMP "timestamp" /* not stored on disk */ 564185029Spjd#define ZPOOL_CONFIG_BOOTFS "bootfs" /* not stored on disk */ 565219089Spjd#define ZPOOL_CONFIG_MISSING_DEVICES "missing_vdevs" /* not stored on disk */ 566219089Spjd#define ZPOOL_CONFIG_LOAD_INFO "load_info" /* not stored on disk */ 567236884Smm#define ZPOOL_CONFIG_REWIND_INFO "rewind_info" /* not stored on disk */ 568236884Smm#define ZPOOL_CONFIG_UNSUP_FEAT "unsup_feat" /* not stored on disk */ 569238926Smm#define ZPOOL_CONFIG_ENABLED_FEAT "enabled_feat" /* not stored on disk */ 570236884Smm#define ZPOOL_CONFIG_CAN_RDONLY "can_rdonly" /* not stored on disk */ 571236884Smm#define ZPOOL_CONFIG_FEATURES_FOR_READ "features_for_read" 572236884Smm#define ZPOOL_CONFIG_FEATURE_STATS "feature_stats" /* not stored on disk */ 573185029Spjd/* 574185029Spjd * The persistent vdev state is stored as separate values rather than a single 575185029Spjd * 'vdev_state' entry. This is because a device can be in multiple states, such 576185029Spjd * as offline and degraded. 577185029Spjd */ 578185029Spjd#define ZPOOL_CONFIG_OFFLINE "offline" 579185029Spjd#define ZPOOL_CONFIG_FAULTED "faulted" 580185029Spjd#define ZPOOL_CONFIG_DEGRADED "degraded" 581185029Spjd#define ZPOOL_CONFIG_REMOVED "removed" 582209962Smm#define ZPOOL_CONFIG_FRU "fru" 583219089Spjd#define ZPOOL_CONFIG_AUX_STATE "aux_state" 584168404Spjd 585219089Spjd/* Rewind policy parameters */ 586219089Spjd#define ZPOOL_REWIND_POLICY "rewind-policy" 587219089Spjd#define ZPOOL_REWIND_REQUEST "rewind-request" 588219089Spjd#define ZPOOL_REWIND_REQUEST_TXG "rewind-request-txg" 589219089Spjd#define ZPOOL_REWIND_META_THRESH "rewind-meta-thresh" 590219089Spjd#define ZPOOL_REWIND_DATA_THRESH "rewind-data-thresh" 591219089Spjd 592219089Spjd/* Rewind data discovered */ 593219089Spjd#define ZPOOL_CONFIG_LOAD_TIME "rewind_txg_ts" 594219089Spjd#define ZPOOL_CONFIG_LOAD_DATA_ERRORS "verify_data_errors" 595219089Spjd#define ZPOOL_CONFIG_REWIND_TIME "seconds_of_rewind" 596219089Spjd 597168404Spjd#define VDEV_TYPE_ROOT "root" 598168404Spjd#define VDEV_TYPE_MIRROR "mirror" 599168404Spjd#define VDEV_TYPE_REPLACING "replacing" 600168404Spjd#define VDEV_TYPE_RAIDZ "raidz" 601168404Spjd#define VDEV_TYPE_DISK "disk" 602168404Spjd#define VDEV_TYPE_FILE "file" 603168404Spjd#define VDEV_TYPE_MISSING "missing" 604219089Spjd#define VDEV_TYPE_HOLE "hole" 605168404Spjd#define VDEV_TYPE_SPARE "spare" 606185029Spjd#define VDEV_TYPE_LOG "log" 607185029Spjd#define VDEV_TYPE_L2CACHE "l2cache" 608168404Spjd 609168404Spjd/* 610168404Spjd * This is needed in userland to report the minimum necessary device size. 611307126Smav * 612307126Smav * Note that the zfs test suite uses 64MB vdevs. 613168404Spjd */ 614168404Spjd#define SPA_MINDEVSIZE (64ULL << 20) 615168404Spjd 616168404Spjd/* 617269773Sdelphij * Set if the fragmentation has not yet been calculated. This can happen 618269773Sdelphij * because the space maps have not been upgraded or the histogram feature 619269773Sdelphij * is not enabled. 620269773Sdelphij */ 621269773Sdelphij#define ZFS_FRAG_INVALID UINT64_MAX 622269773Sdelphij 623269773Sdelphij/* 624168404Spjd * The location of the pool configuration repository, shared between kernel and 625168404Spjd * userland. 626168404Spjd */ 627185029Spjd#define ZPOOL_CACHE "/boot/zfs/zpool.cache" 628168404Spjd 629168404Spjd/* 630168404Spjd * vdev states are ordered from least to most healthy. 631168404Spjd * A vdev that's CANT_OPEN or below is considered unusable. 632168404Spjd */ 633168404Spjdtypedef enum vdev_state { 634168404Spjd VDEV_STATE_UNKNOWN = 0, /* Uninitialized vdev */ 635168404Spjd VDEV_STATE_CLOSED, /* Not currently open */ 636168404Spjd VDEV_STATE_OFFLINE, /* Not allowed to open */ 637185029Spjd VDEV_STATE_REMOVED, /* Explicitly removed from system */ 638168404Spjd VDEV_STATE_CANT_OPEN, /* Tried to open, but failed */ 639185029Spjd VDEV_STATE_FAULTED, /* External request to fault device */ 640168404Spjd VDEV_STATE_DEGRADED, /* Replicated vdev with unhealthy kids */ 641168404Spjd VDEV_STATE_HEALTHY /* Presumed good */ 642168404Spjd} vdev_state_t; 643168404Spjd 644185029Spjd#define VDEV_STATE_ONLINE VDEV_STATE_HEALTHY 645185029Spjd 646168404Spjd/* 647168404Spjd * vdev aux states. When a vdev is in the CANT_OPEN state, the aux field 648168404Spjd * of the vdev stats structure uses these constants to distinguish why. 649168404Spjd */ 650168404Spjdtypedef enum vdev_aux { 651168404Spjd VDEV_AUX_NONE, /* no error */ 652168404Spjd VDEV_AUX_OPEN_FAILED, /* ldi_open_*() or vn_open() failed */ 653168404Spjd VDEV_AUX_CORRUPT_DATA, /* bad label or disk contents */ 654168404Spjd VDEV_AUX_NO_REPLICAS, /* insufficient number of replicas */ 655168404Spjd VDEV_AUX_BAD_GUID_SUM, /* vdev guid sum doesn't match */ 656168404Spjd VDEV_AUX_TOO_SMALL, /* vdev size is too small */ 657168404Spjd VDEV_AUX_BAD_LABEL, /* the label is OK but invalid */ 658168404Spjd VDEV_AUX_VERSION_NEWER, /* on-disk version is too new */ 659168404Spjd VDEV_AUX_VERSION_OLDER, /* on-disk version is too old */ 660236884Smm VDEV_AUX_UNSUP_FEAT, /* unsupported features */ 661185029Spjd VDEV_AUX_SPARED, /* hot spare used in another pool */ 662185029Spjd VDEV_AUX_ERR_EXCEEDED, /* too many errors */ 663185029Spjd VDEV_AUX_IO_FAILURE, /* experienced I/O failure */ 664219089Spjd VDEV_AUX_BAD_LOG, /* cannot read log chain(s) */ 665219089Spjd VDEV_AUX_EXTERNAL, /* external diagnosis */ 666254591Sgibbs VDEV_AUX_SPLIT_POOL, /* vdev was split off into another pool */ 667254591Sgibbs VDEV_AUX_ASHIFT_TOO_BIG /* vdev's min block size is too large */ 668168404Spjd} vdev_aux_t; 669168404Spjd 670168404Spjd/* 671168404Spjd * pool state. The following states are written to disk as part of the normal 672185029Spjd * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE. The remaining 673185029Spjd * states are software abstractions used at various levels to communicate 674185029Spjd * pool state. 675168404Spjd */ 676168404Spjdtypedef enum pool_state { 677168404Spjd POOL_STATE_ACTIVE = 0, /* In active use */ 678168404Spjd POOL_STATE_EXPORTED, /* Explicitly exported */ 679168404Spjd POOL_STATE_DESTROYED, /* Explicitly destroyed */ 680168404Spjd POOL_STATE_SPARE, /* Reserved for hot spare use */ 681185029Spjd POOL_STATE_L2CACHE, /* Level 2 ARC device */ 682168404Spjd POOL_STATE_UNINITIALIZED, /* Internal spa_t state */ 683168404Spjd POOL_STATE_UNAVAIL, /* Internal libzfs state */ 684168404Spjd POOL_STATE_POTENTIALLY_ACTIVE /* Internal libzfs state */ 685168404Spjd} pool_state_t; 686168404Spjd 687168404Spjd/* 688219089Spjd * Scan Functions. 689168404Spjd */ 690219089Spjdtypedef enum pool_scan_func { 691219089Spjd POOL_SCAN_NONE, 692219089Spjd POOL_SCAN_SCRUB, 693219089Spjd POOL_SCAN_RESILVER, 694219089Spjd POOL_SCAN_FUNCS 695219089Spjd} pool_scan_func_t; 696168404Spjd 697168404Spjd/* 698168404Spjd * ZIO types. Needed to interpret vdev statistics below. 699168404Spjd */ 700168404Spjdtypedef enum zio_type { 701168404Spjd ZIO_TYPE_NULL = 0, 702168404Spjd ZIO_TYPE_READ, 703168404Spjd ZIO_TYPE_WRITE, 704168404Spjd ZIO_TYPE_FREE, 705168404Spjd ZIO_TYPE_CLAIM, 706168404Spjd ZIO_TYPE_IOCTL, 707168404Spjd ZIO_TYPES 708168404Spjd} zio_type_t; 709168404Spjd 710168404Spjd/* 711219089Spjd * Pool statistics. Note: all fields should be 64-bit because this 712219089Spjd * is passed between kernel and userland as an nvlist uint64 array. 713219089Spjd */ 714219089Spjdtypedef struct pool_scan_stat { 715219089Spjd /* values stored on disk */ 716219089Spjd uint64_t pss_func; /* pool_scan_func_t */ 717219089Spjd uint64_t pss_state; /* dsl_scan_state_t */ 718219089Spjd uint64_t pss_start_time; /* scan start time */ 719219089Spjd uint64_t pss_end_time; /* scan end time */ 720219089Spjd uint64_t pss_to_examine; /* total bytes to scan */ 721219089Spjd uint64_t pss_examined; /* total examined bytes */ 722219089Spjd uint64_t pss_to_process; /* total bytes to process */ 723219089Spjd uint64_t pss_processed; /* total processed bytes */ 724219089Spjd uint64_t pss_errors; /* scan errors */ 725219089Spjd 726219089Spjd /* values not stored on disk */ 727219089Spjd uint64_t pss_pass_exam; /* examined bytes per scan pass */ 728219089Spjd uint64_t pss_pass_start; /* start time of a scan pass */ 729219089Spjd} pool_scan_stat_t; 730219089Spjd 731219089Spjdtypedef enum dsl_scan_state { 732219089Spjd DSS_NONE, 733219089Spjd DSS_SCANNING, 734219089Spjd DSS_FINISHED, 735219089Spjd DSS_CANCELED, 736219089Spjd DSS_NUM_STATES 737219089Spjd} dsl_scan_state_t; 738219089Spjd 739219089Spjd 740219089Spjd/* 741168404Spjd * Vdev statistics. Note: all fields should be 64-bit because this 742168404Spjd * is passed between kernel and userland as an nvlist uint64 array. 743168404Spjd */ 744168404Spjdtypedef struct vdev_stat { 745168404Spjd hrtime_t vs_timestamp; /* time since vdev load */ 746168404Spjd uint64_t vs_state; /* vdev state */ 747168404Spjd uint64_t vs_aux; /* see vdev_aux_t */ 748168404Spjd uint64_t vs_alloc; /* space allocated */ 749168404Spjd uint64_t vs_space; /* total capacity */ 750168404Spjd uint64_t vs_dspace; /* deflated capacity */ 751168404Spjd uint64_t vs_rsize; /* replaceable dev size */ 752236155Smm uint64_t vs_esize; /* expandable dev size */ 753168404Spjd uint64_t vs_ops[ZIO_TYPES]; /* operation count */ 754168404Spjd uint64_t vs_bytes[ZIO_TYPES]; /* bytes read/written */ 755168404Spjd uint64_t vs_read_errors; /* read errors */ 756168404Spjd uint64_t vs_write_errors; /* write errors */ 757168404Spjd uint64_t vs_checksum_errors; /* checksum errors */ 758168404Spjd uint64_t vs_self_healed; /* self-healed bytes */ 759219089Spjd uint64_t vs_scan_removing; /* removing? */ 760219089Spjd uint64_t vs_scan_processed; /* scan processed bytes */ 761254591Sgibbs uint64_t vs_configured_ashift; /* TLV vdev_ashift */ 762254591Sgibbs uint64_t vs_logical_ashift; /* vdev_logical_ashift */ 763254591Sgibbs uint64_t vs_physical_ashift; /* vdev_physical_ashift */ 764269773Sdelphij uint64_t vs_fragmentation; /* device fragmentation */ 765168404Spjd} vdev_stat_t; 766254591Sgibbs#define VDEV_STAT_VALID(field, uint64_t_field_count) \ 767254591Sgibbs ((uint64_t_field_count * sizeof(uint64_t)) >= \ 768254591Sgibbs (offsetof(vdev_stat_t, field) + sizeof(((vdev_stat_t *)NULL)->field))) 769168404Spjd 770219089Spjd/* 771219089Spjd * DDT statistics. Note: all fields should be 64-bit because this 772219089Spjd * is passed between kernel and userland as an nvlist uint64 array. 773219089Spjd */ 774219089Spjdtypedef struct ddt_object { 775219089Spjd uint64_t ddo_count; /* number of elments in ddt */ 776219089Spjd uint64_t ddo_dspace; /* size of ddt on disk */ 777219089Spjd uint64_t ddo_mspace; /* size of ddt in-core */ 778219089Spjd} ddt_object_t; 779219089Spjd 780219089Spjdtypedef struct ddt_stat { 781219089Spjd uint64_t dds_blocks; /* blocks */ 782219089Spjd uint64_t dds_lsize; /* logical size */ 783219089Spjd uint64_t dds_psize; /* physical size */ 784219089Spjd uint64_t dds_dsize; /* deflated allocated size */ 785219089Spjd uint64_t dds_ref_blocks; /* referenced blocks */ 786219089Spjd uint64_t dds_ref_lsize; /* referenced lsize * refcnt */ 787219089Spjd uint64_t dds_ref_psize; /* referenced psize * refcnt */ 788219089Spjd uint64_t dds_ref_dsize; /* referenced dsize * refcnt */ 789219089Spjd} ddt_stat_t; 790219089Spjd 791219089Spjdtypedef struct ddt_histogram { 792219089Spjd ddt_stat_t ddh_stat[64]; /* power-of-two histogram buckets */ 793219089Spjd} ddt_histogram_t; 794219089Spjd 795185029Spjd#define ZVOL_DRIVER "zvol" 796168404Spjd#define ZFS_DRIVER "zfs" 797168404Spjd#define ZFS_DEV_NAME "zfs" 798168404Spjd#define ZFS_DEV "/dev/" ZFS_DEV_NAME 799299430Smav#define ZFS_DISK_ROOT "/dev/dsk" 800299430Smav#define ZFS_DISK_ROOTD ZFS_DISK_ROOT "/" 801299430Smav#define ZFS_RDISK_ROOT "/dev/rdsk" 802299430Smav#define ZFS_RDISK_ROOTD ZFS_RDISK_ROOT "/" 803168404Spjd 804219089Spjd/* general zvol path */ 805219089Spjd#define ZVOL_DIR "/dev/zvol" 806219089Spjd/* expansion */ 807219089Spjd#define ZVOL_PSEUDO_DEV "/devices/pseudo/zfs@0:" 808219089Spjd/* for dump and swap */ 809219089Spjd#define ZVOL_FULL_DEV_DIR ZVOL_DIR "/dsk/" 810219089Spjd#define ZVOL_FULL_RDEV_DIR ZVOL_DIR "/rdsk/" 811168404Spjd 812168404Spjd#define ZVOL_PROP_NAME "name" 813219089Spjd#define ZVOL_DEFAULT_BLOCKSIZE 8192 814168404Spjd 815168404Spjd/* 816168404Spjd * /dev/zfs ioctl numbers. 817168404Spjd */ 818248571Smmtypedef enum zfs_ioc { 819248571Smm ZFS_IOC_FIRST = 0, 820248571Smm ZFS_IOC_POOL_CREATE = ZFS_IOC_FIRST, 821248571Smm ZFS_IOC_POOL_DESTROY, 822248571Smm ZFS_IOC_POOL_IMPORT, 823248571Smm ZFS_IOC_POOL_EXPORT, 824248571Smm ZFS_IOC_POOL_CONFIGS, 825248571Smm ZFS_IOC_POOL_STATS, 826248571Smm ZFS_IOC_POOL_TRYIMPORT, 827248571Smm ZFS_IOC_POOL_SCAN, 828248571Smm ZFS_IOC_POOL_FREEZE, 829248571Smm ZFS_IOC_POOL_UPGRADE, 830248571Smm ZFS_IOC_POOL_GET_HISTORY, 831248571Smm ZFS_IOC_VDEV_ADD, 832248571Smm ZFS_IOC_VDEV_REMOVE, 833248571Smm ZFS_IOC_VDEV_SET_STATE, 834248571Smm ZFS_IOC_VDEV_ATTACH, 835248571Smm ZFS_IOC_VDEV_DETACH, 836248571Smm ZFS_IOC_VDEV_SETPATH, 837248571Smm ZFS_IOC_VDEV_SETFRU, 838248571Smm ZFS_IOC_OBJSET_STATS, 839248571Smm ZFS_IOC_OBJSET_ZPLPROPS, 840248571Smm ZFS_IOC_DATASET_LIST_NEXT, 841248571Smm ZFS_IOC_SNAPSHOT_LIST_NEXT, 842248571Smm ZFS_IOC_SET_PROP, 843248571Smm ZFS_IOC_CREATE, 844248571Smm ZFS_IOC_DESTROY, 845248571Smm ZFS_IOC_ROLLBACK, 846248571Smm ZFS_IOC_RENAME, 847248571Smm ZFS_IOC_RECV, 848248571Smm ZFS_IOC_SEND, 849248571Smm ZFS_IOC_INJECT_FAULT, 850248571Smm ZFS_IOC_CLEAR_FAULT, 851248571Smm ZFS_IOC_INJECT_LIST_NEXT, 852248571Smm ZFS_IOC_ERROR_LOG, 853248571Smm ZFS_IOC_CLEAR, 854248571Smm ZFS_IOC_PROMOTE, 855248571Smm ZFS_IOC_DESTROY_SNAPS, 856248571Smm ZFS_IOC_SNAPSHOT, 857248571Smm ZFS_IOC_DSOBJ_TO_DSNAME, 858248571Smm ZFS_IOC_OBJ_TO_PATH, 859248571Smm ZFS_IOC_POOL_SET_PROPS, 860248571Smm ZFS_IOC_POOL_GET_PROPS, 861248571Smm ZFS_IOC_SET_FSACL, 862248571Smm ZFS_IOC_GET_FSACL, 863248571Smm ZFS_IOC_SHARE, 864248571Smm ZFS_IOC_INHERIT_PROP, 865248571Smm ZFS_IOC_SMB_ACL, 866248571Smm ZFS_IOC_USERSPACE_ONE, 867248571Smm ZFS_IOC_USERSPACE_MANY, 868248571Smm ZFS_IOC_USERSPACE_UPGRADE, 869248571Smm ZFS_IOC_HOLD, 870248571Smm ZFS_IOC_RELEASE, 871248571Smm ZFS_IOC_GET_HOLDS, 872248571Smm ZFS_IOC_OBJSET_RECVD_PROPS, 873248571Smm ZFS_IOC_VDEV_SPLIT, 874248571Smm ZFS_IOC_NEXT_OBJ, 875248571Smm ZFS_IOC_DIFF, 876248571Smm ZFS_IOC_TMP_SNAPSHOT, 877248571Smm ZFS_IOC_OBJ_TO_STATS, 878248571Smm ZFS_IOC_JAIL, 879248571Smm ZFS_IOC_UNJAIL, 880248571Smm ZFS_IOC_POOL_REGUID, 881248571Smm ZFS_IOC_SPACE_WRITTEN, 882248571Smm ZFS_IOC_SPACE_SNAPS, 883248571Smm ZFS_IOC_SEND_PROGRESS, 884248571Smm ZFS_IOC_POOL_REOPEN, 885248571Smm ZFS_IOC_LOG_HISTORY, 886248571Smm ZFS_IOC_SEND_NEW, 887248571Smm ZFS_IOC_SEND_SPACE, 888248571Smm ZFS_IOC_CLONE, 889263407Sdelphij ZFS_IOC_BOOKMARK, 890263407Sdelphij ZFS_IOC_GET_BOOKMARKS, 891263407Sdelphij ZFS_IOC_DESTROY_BOOKMARKS, 892308915Savg ZFS_IOC_NEXTBOOT, 893248571Smm ZFS_IOC_LAST 894248571Smm} zfs_ioc_t; 895168404Spjd 896168404Spjd/* 897168404Spjd * Internal SPA load state. Used by FMA diagnosis engine. 898168404Spjd */ 899168404Spjdtypedef enum { 900219089Spjd SPA_LOAD_NONE, /* no load in progress */ 901219089Spjd SPA_LOAD_OPEN, /* normal open */ 902219089Spjd SPA_LOAD_IMPORT, /* import in progress */ 903219089Spjd SPA_LOAD_TRYIMPORT, /* tryimport in progress */ 904219089Spjd SPA_LOAD_RECOVER, /* recovery requested */ 905307279Smav SPA_LOAD_ERROR, /* load failed */ 906307279Smav SPA_LOAD_CREATE /* creation in progress */ 907168404Spjd} spa_load_state_t; 908168404Spjd 909168404Spjd/* 910168404Spjd * Bookmark name values. 911168404Spjd */ 912168404Spjd#define ZPOOL_ERR_LIST "error list" 913168404Spjd#define ZPOOL_ERR_DATASET "dataset" 914168404Spjd#define ZPOOL_ERR_OBJECT "object" 915168404Spjd 916168404Spjd#define HIS_MAX_RECORD_LEN (MAXPATHLEN + MAXPATHLEN + 1) 917168404Spjd 918168404Spjd/* 919168404Spjd * The following are names used in the nvlist describing 920168404Spjd * the pool's history log. 921168404Spjd */ 922168404Spjd#define ZPOOL_HIST_RECORD "history record" 923168404Spjd#define ZPOOL_HIST_TIME "history time" 924168404Spjd#define ZPOOL_HIST_CMD "history command" 925185029Spjd#define ZPOOL_HIST_WHO "history who" 926185029Spjd#define ZPOOL_HIST_ZONE "history zone" 927185029Spjd#define ZPOOL_HIST_HOST "history hostname" 928185029Spjd#define ZPOOL_HIST_TXG "history txg" 929185029Spjd#define ZPOOL_HIST_INT_EVENT "history internal event" 930185029Spjd#define ZPOOL_HIST_INT_STR "history internal str" 931248571Smm#define ZPOOL_HIST_INT_NAME "internal_name" 932248571Smm#define ZPOOL_HIST_IOCTL "ioctl" 933248571Smm#define ZPOOL_HIST_INPUT_NVL "in_nvl" 934248571Smm#define ZPOOL_HIST_OUTPUT_NVL "out_nvl" 935248571Smm#define ZPOOL_HIST_DSNAME "dsname" 936248571Smm#define ZPOOL_HIST_DSID "dsid" 937168404Spjd 938185029Spjd/* 939185029Spjd * Flags for ZFS_IOC_VDEV_SET_STATE 940185029Spjd */ 941185029Spjd#define ZFS_ONLINE_CHECKREMOVE 0x1 942185029Spjd#define ZFS_ONLINE_UNSPARE 0x2 943185029Spjd#define ZFS_ONLINE_FORCEFAULT 0x4 944219089Spjd#define ZFS_ONLINE_EXPAND 0x8 945185029Spjd#define ZFS_OFFLINE_TEMPORARY 0x1 946185029Spjd 947185029Spjd/* 948219089Spjd * Flags for ZFS_IOC_POOL_IMPORT 949219089Spjd */ 950219089Spjd#define ZFS_IMPORT_NORMAL 0x0 951219089Spjd#define ZFS_IMPORT_VERBATIM 0x1 952219089Spjd#define ZFS_IMPORT_ANY_HOST 0x2 953219089Spjd#define ZFS_IMPORT_MISSING_LOG 0x4 954219089Spjd#define ZFS_IMPORT_ONLY 0x8 955333196Savg#define ZFS_IMPORT_TEMP_NAME 0x20 956219089Spjd 957219089Spjd/* 958185029Spjd * Sysevent payload members. ZFS will generate the following sysevents with the 959185029Spjd * given payloads: 960185029Spjd * 961185029Spjd * ESC_ZFS_RESILVER_START 962185029Spjd * ESC_ZFS_RESILVER_END 963185029Spjd * ESC_ZFS_POOL_DESTROY 964228103Smm * ESC_ZFS_POOL_REGUID 965185029Spjd * 966185029Spjd * ZFS_EV_POOL_NAME DATA_TYPE_STRING 967185029Spjd * ZFS_EV_POOL_GUID DATA_TYPE_UINT64 968185029Spjd * 969185029Spjd * ESC_ZFS_VDEV_REMOVE 970185029Spjd * ESC_ZFS_VDEV_CLEAR 971185029Spjd * ESC_ZFS_VDEV_CHECK 972185029Spjd * 973185029Spjd * ZFS_EV_POOL_NAME DATA_TYPE_STRING 974185029Spjd * ZFS_EV_POOL_GUID DATA_TYPE_UINT64 975185029Spjd * ZFS_EV_VDEV_PATH DATA_TYPE_STRING (optional) 976185029Spjd * ZFS_EV_VDEV_GUID DATA_TYPE_UINT64 977185029Spjd */ 978185029Spjd#define ZFS_EV_POOL_NAME "pool_name" 979185029Spjd#define ZFS_EV_POOL_GUID "pool_guid" 980185029Spjd#define ZFS_EV_VDEV_PATH "vdev_path" 981185029Spjd#define ZFS_EV_VDEV_GUID "vdev_guid" 982185029Spjd 983168404Spjd#ifdef __cplusplus 984168404Spjd} 985168404Spjd#endif 986168404Spjd 987168404Spjd#endif /* _SYS_FS_ZFS_H */ 988