zfs.h revision 187d6ac08adc31ea6868bde0cfbbb288826254e8
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER START
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The contents of this file are subject to the terms of the
441d80aa4f613b6298fc8bd3151f4be02dbf84fclling * Common Development and Distribution License (the "License").
441d80aa4f613b6298fc8bd3151f4be02dbf84fclling * You may not use this file except in compliance with the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fa9e4066f08beec538e775443c5be79dd423fcabahrens * See the License for the specific language governing permissions
fa9e4066f08beec538e775443c5be79dd423fcabahrens * and limitations under the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * When distributing Covered Code, include this CDDL HEADER in each
fa9e4066f08beec538e775443c5be79dd423fcabahrens * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * If applicable, add the following below this CDDL HEADER, with the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * fields enclosed by brackets "[]" replaced with your own identifying
fa9e4066f08beec538e775443c5be79dd423fcabahrens * information: Portions Copyright [yyyy] [name of copyright owner]
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER END
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Copyright (c) 2011 by Delphix. All rights reserved.
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* Portions Copyright 2010 Robert Milkowski */
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern "C" {
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Types and constants shared between userland and the kernel.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Each dataset can be one of the following types. These constants can be
fa9e4066f08beec538e775443c5be79dd423fcabahrens * combined into masks that can be passed to various functions.
b1b8ab34de515a5e83206da22c3d7e563241b021llingtypedef enum {
990b4856d0eaada6f8140335733a1b1771ed2746lling (ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME | ZFS_TYPE_SNAPSHOT)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Dataset properties are identified by these constants and must be added to
fa9e4066f08beec538e775443c5be79dd423fcabahrens * the end of this list to ensure that external consumers are not affected
fa9e4066f08beec538e775443c5be79dd423fcabahrens * by the change. If you make any changes to this list, be sure to update
fa9e4066f08beec538e775443c5be79dd423fcabahrens * the property table in usr/src/common/zfs/zfs_prop.c.
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef enum {
990b4856d0eaada6f8140335733a1b1771ed2746lling ZFS_PROP_USERACCOUNTING, /* not exposed to the user */
990b4856d0eaada6f8140335733a1b1771ed2746lling ZFS_PROP_STMF_SHAREINFO, /* not exposed to the user */
b1b8ab34de515a5e83206da22c3d7e563241b021llingtypedef enum {
990b4856d0eaada6f8140335733a1b1771ed2746llingextern const char *zfs_userquota_prop_prefixes[ZFS_NUM_USERQUOTA_PROPS];
990b4856d0eaada6f8140335733a1b1771ed2746lling * Pool properties are identified by these constants and must be added to the
990b4856d0eaada6f8140335733a1b1771ed2746lling * end of this list to ensure that external consumers are not affected
990b4856d0eaada6f8140335733a1b1771ed2746lling * by the change. If you make any changes to this list, be sure to update
990b4856d0eaada6f8140335733a1b1771ed2746lling * the property table in usr/src/common/zfs/zpool_prop.c.
990b4856d0eaada6f8140335733a1b1771ed2746llingtypedef enum {
990b4856d0eaada6f8140335733a1b1771ed2746llingtypedef enum {
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * Dataset flag implemented as a special entry in the props zap object
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * indicating that the dataset has received properties on or after
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * SPA_VERSION_RECVD_PROPS. The first such receive blows away local properties
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * just as it did in earlier versions, and thereafter, local properties are
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * preserved.
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkstypedef enum {
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks ZPROP_ERR_NOCLEAR = 0x1, /* failure to clear existing props */
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks ZPROP_ERR_NORESTORE = 0x2 /* failure to restore props on error */
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkstypedef int (*zprop_func)(int, void *);
a227b7f4f323ad89c40a86c430a5e891504a8e8bhs * Properties to be set on the root file system of a new pool
a227b7f4f323ad89c40a86c430a5e891504a8e8bhs * are stuffed into their own nvlist, which is then included in
a227b7f4f323ad89c40a86c430a5e891504a8e8bhs * the properties nvlist with the pool properties.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Dataset property functions shared between libzfs and kernel.
e7437265dc2a4920c197ed4337665539d358b22cahrensint zfs_prop_index_to_string(zfs_prop_t, uint64_t, const char **);
e7437265dc2a4920c197ed4337665539d358b22cahrensint zfs_prop_string_to_index(zfs_prop_t, const char *, uint64_t *);
e7437265dc2a4920c197ed4337665539d358b22cahrensuint64_t zfs_prop_random_value(zfs_prop_t, uint64_t seed);
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * Pool property functions shared between libzfs and kernel.
088f389458728c464569a5506b58070254fa4f7dahrensint zpool_prop_index_to_string(zpool_prop_t, uint64_t, const char **);
088f389458728c464569a5506b58070254fa4f7dahrensint zpool_prop_string_to_index(zpool_prop_t, const char *, uint64_t *);
44cd46cadd9aab751dae6a4023c1cb5bf316d274billmuint64_t zpool_prop_random_value(zpool_prop_t, uint64_t seed);
44cd46cadd9aab751dae6a4023c1cb5bf316d274billm * Definitions for the Delegation.
44cd46cadd9aab751dae6a4023c1cb5bf316d274billmtypedef enum {
e7437265dc2a4920c197ed4337665539d358b22cahrenstypedef enum {
e7437265dc2a4920c197ed4337665539d358b22cahrenstypedef enum {
e7437265dc2a4920c197ed4337665539d358b22cahrenstypedef enum {
e7437265dc2a4920c197ed4337665539d358b22cahrenstypedef enum zfs_share_op {
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef enum zfs_smb_acl_op {
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef enum zfs_cache_type {
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef enum {
fa9e4066f08beec538e775443c5be79dd423fcabahrens * On-disk version number.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * When bumping up SPA_VERSION, make sure GRUB ZFS understands the on-disk
99653d4ee642c6528e88224f12409a5f23060994eschrock * format change. Go to usr/src/grub/grub-0.97/stage2/{zfs-include/, fsys_zfs*},
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin * and do the appropriate changes. Also bump the version number in
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Symbolic names for the changes that caused a SPA_VERSION switch.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Used in the code when checking for presence or absence of a feature.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Feel free to define multiple symbolic names for each version if there
fa9e4066f08beec538e775443c5be79dd423fcabahrens * were multiple changes to on-disk structures during that version.
c5904d138f3bdf0762dbf452a43d5a5c387ea6a8eschrock * NOTE: When checking the current SPA_VERSION in your code, be sure
fa9e4066f08beec538e775443c5be79dd423fcabahrens * to use spa_version() since it reports the version of the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * last synced uberblock. Checking the in-flight version can
fa9e4066f08beec538e775443c5be79dd423fcabahrens * be dangerous in some cases.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ZPL version - rev'd whenever an incompatible on-disk format change
fa9e4066f08beec538e775443c5be79dd423fcabahrens * occurs. This is independent of SPA/DMU/ZAP versioning. You must
fa9e4066f08beec538e775443c5be79dd423fcabahrens * also update the version_table[] and help message in zfs_prop.c.
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * When changing, be sure to teach GRUB how to read the new format!
fa9e4066f08beec538e775443c5be79dd423fcabahrens * See usr/src/grub/grub-0.97/stage2/{zfs-include/,fsys_zfs*}
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* Rewind request information */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_NO_REWIND 1 /* No policy - default behavior */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_NEVER_REWIND 2 /* Do not search for best txg or rewind */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_TRY_REWIND 4 /* Search for best txg, but do not rewind */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_DO_REWIND 8 /* Rewind to best txg w/in deferred frees */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_EXTREME_REWIND 16 /* Allow extreme measures to find best txg */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_REWIND_MASK 28 /* All the possible rewind bits */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_REWIND_POLICIES 31 /* All the possible policy bits */
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef struct zpool_rewind_policy {
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint32_t zrp_request; /* rewind behavior requested */
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint64_t zrp_maxmeta; /* max acceptable meta-data errors */
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint64_t zrp_maxdata; /* max acceptable data errors */
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The following are configuration names used in the nvlist describing a pool's
fa9e4066f08beec538e775443c5be79dd423fcabahrens * configuration.
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_CONFIG_SCAN_STATS "scan_stats" /* not stored on disk */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_CONFIG_VDEV_STATS "vdev_stats" /* not stored on disk */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_CONFIG_SUSPENDED "suspended" /* not stored on disk */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_CONFIG_TIMESTAMP "timestamp" /* not stored on disk */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_CONFIG_BOOTFS "bootfs" /* not stored on disk */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_CONFIG_MISSING_DEVICES "missing_vdevs" /* not stored on disk */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZPOOL_CONFIG_LOAD_INFO "load_info" /* not stored on disk */
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The persistent vdev state is stored as separate values rather than a single
eaca9bbd5f5d1e4e554da4c7108e8a03c8c33481eschrock * 'vdev_state' entry. This is because a device can be in multiple states, such
06eeb2ad640ce72d394ac521094bed7681044408ek * as offline and degraded.
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* Rewind policy parameters */
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* Rewind data discovered */
3cb34c601f3ef3016f638574f5982e80c3735c71ahrens#define ZPOOL_CONFIG_LOAD_DATA_ERRORS "verify_data_errors"
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * This is needed in userland to report the minimum necessary device size.
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock * The location of the pool configuration repository, shared between kernel and
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock * userland.
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock * vdev states are ordered from least to most healthy.
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock * A vdev that's CANT_OPEN or below is considered unusable.
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrocktypedef enum vdev_state {
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrock VDEV_STATE_CANT_OPEN, /* Tried to open, but failed */
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrock VDEV_STATE_FAULTED, /* External request to fault device */
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrock VDEV_STATE_DEGRADED, /* Replicated vdev with unhealthy kids */
06eeb2ad640ce72d394ac521094bed7681044408ek * vdev aux states. When a vdev is in the CANT_OPEN state, the aux field
06eeb2ad640ce72d394ac521094bed7681044408ek * of the vdev stats structure uses these constants to distinguish why.
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkstypedef enum vdev_aux {
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks VDEV_AUX_OPEN_FAILED, /* ldi_open_*() or vn_open() failed */
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks VDEV_AUX_CORRUPT_DATA, /* bad label or disk contents */
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks VDEV_AUX_NO_REPLICAS, /* insufficient number of replicas */
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks VDEV_AUX_BAD_GUID_SUM, /* vdev guid sum doesn't match */
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock VDEV_AUX_BAD_LABEL, /* the label is OK but invalid */
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock VDEV_AUX_VERSION_NEWER, /* on-disk version is too new */
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock VDEV_AUX_VERSION_OLDER, /* on-disk version is too old */
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock VDEV_AUX_SPARED, /* hot spare used in another pool */
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock VDEV_AUX_SPLIT_POOL /* vdev was split off into another pool */
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock * pool state. The following states are written to disk as part of the normal
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE. The remaining
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock * states are software abstractions used at various levels to communicate
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock * pool state.
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrocktypedef enum pool_state {
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock POOL_STATE_UNINITIALIZED, /* Internal spa_t state */
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock POOL_STATE_POTENTIALLY_ACTIVE /* Internal libzfs state */
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock * Scan Functions.
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * ZIO types. Needed to interpret vdev statistics below.
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkstypedef enum zio_type {
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * Pool statistics. Note: all fields should be 64-bit because this
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * is passed between kernel and userland as an nvlist uint64 array.
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkstypedef struct pool_scan_stat {
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks /* values stored on disk */
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks /* values not stored on disk */
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks uint64_t pss_pass_exam; /* examined bytes per scan pass */
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks uint64_t pss_pass_start; /* start time of a scan pass */
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkstypedef enum dsl_scan_state {
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Vdev statistics. Note: all fields should be 64-bit because this
fa9e4066f08beec538e775443c5be79dd423fcabahrens * is passed between kernel and userland as an nvlist uint64 array.
typedef struct vdev_stat {
} vdev_stat_t;
typedef struct ddt_object {
} ddt_object_t;
typedef struct ddt_stat {
} ddt_stat_t;
typedef struct ddt_histogram {
typedef enum zfs_ioc {
} zfs_ioc_t;
* libzfs_pool.c: hist_event_table[].
typedef enum history_internal_events {
LOG_NO_EVENT = 0,
#ifdef __cplusplus