zfs.h revision e14bb3258d05c1b1077e2db7cf77088924e56919
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 2008 Sun Microsystems, Inc. All rights reserved.
743a77ed89085d3c232c4a2f65ab4e19576839e2Alan Wright * Use is subject to license terms.
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.
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef enum {
fa9e4066f08beec538e775443c5be79dd423fcabahrens (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
478ed9ada0b6efe1318150a700986aa47e6a926dEric Taylor * by the change. If you make any changes to this list, be sure to update
478ed9ada0b6efe1318150a700986aa47e6a926dEric Taylor * the property table in usr/src/common/zfs/zfs_prop.c.
478ed9ada0b6efe1318150a700986aa47e6a926dEric Taylortypedef enum {
74e7dc986c89efca1f2e4451c7a572e05e4a6e4fMatthew Ahrens * Pool properties are identified by these constants and must be added to the
74e7dc986c89efca1f2e4451c7a572e05e4a6e4fMatthew Ahrens * end of this list to ensure that external consumers are not affected
74e7dc986c89efca1f2e4451c7a572e05e4a6e4fMatthew Ahrens * by the change. If you make any changes to this list, be sure to update
148434217c040ea38dc844384f6ba68d9b325906Matthew Ahrens * the property table in usr/src/common/zfs/zpool_prop.c.
842727c2f41f01b380de4f5e787d905702870f23Chris Kirbytypedef enum {
990b4856d0eaada6f8140335733a1b1771ed2746llingtypedef enum {
990b4856d0eaada6f8140335733a1b1771ed2746llingtypedef int (*zprop_func)(int, void *);
0a4e9518a44f226be6d39383330b5b1792d2f184gw * Properties to be set on the root file system of a new pool
d5b5bb256c576fe5ef26e0795bd40abe77f93246Rich Morris * are stuffed into their own nvlist, which is then included in
573ca77e53dd31dcaebef023e7eb41969e6896c1George Wilson * the properties nvlist with the pool properties.
990b4856d0eaada6f8140335733a1b1771ed2746lling * Dataset property functions shared between libzfs and kernel.
990b4856d0eaada6f8140335733a1b1771ed2746llingint zfs_prop_index_to_string(zfs_prop_t, uint64_t, const char **);
990b4856d0eaada6f8140335733a1b1771ed2746llingint zfs_prop_string_to_index(zfs_prop_t, const char *, uint64_t *);
990b4856d0eaada6f8140335733a1b1771ed2746lling * Pool property functions shared between libzfs and kernel.
0a48a24e663a04e34e2ed4e55390ad96f178dbeatimhint zpool_prop_index_to_string(zpool_prop_t, uint64_t, const char **);
0a48a24e663a04e34e2ed4e55390ad96f178dbeatimhint zpool_prop_string_to_index(zpool_prop_t, const char *, uint64_t *);
990b4856d0eaada6f8140335733a1b1771ed2746lling * Definitions for the Delegation.
990b4856d0eaada6f8140335733a1b1771ed2746llingtypedef enum {
990b4856d0eaada6f8140335733a1b1771ed2746llingtypedef enum {
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkstypedef enum {
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkstypedef enum zfs_share_op {
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkstypedef enum zfs_cache_type {
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * On-disk version number.
e09fa4dacfb671e707d50a55ae9b5cc191e1b8cbNeil Perrin * When bumping up SPA_VERSION, make sure GRUB ZFS understands the on-disk
e09fa4dacfb671e707d50a55ae9b5cc191e1b8cbNeil Perrin * format change. Go to usr/src/grub/grub-0.95/stage2/{zfs-include/, fsys_zfs*},
e09fa4dacfb671e707d50a55ae9b5cc191e1b8cbNeil Perrin * and do the appropriate changes.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Symbolic names for the changes that caused a SPA_VERSION switch.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Used in the code when checking for presence or absence of a feature.
743a77ed89085d3c232c4a2f65ab4e19576839e2Alan Wright * Feel free to define multiple symbolic names for each version if there
743a77ed89085d3c232c4a2f65ab4e19576839e2Alan Wright * were multiple changes to on-disk structures during that version.
743a77ed89085d3c232c4a2f65ab4e19576839e2Alan Wright * NOTE: When checking the current SPA_VERSION in your code, be sure
743a77ed89085d3c232c4a2f65ab4e19576839e2Alan Wright * to use spa_version() since it reports the version of the
743a77ed89085d3c232c4a2f65ab4e19576839e2Alan Wright * last synced uberblock. Checking the in-flight version can
743a77ed89085d3c232c4a2f65ab4e19576839e2Alan Wright * be dangerous in some cases.
74e7dc986c89efca1f2e4451c7a572e05e4a6e4fMatthew Ahrens#define SPA_VERSION_USED_BREAKDOWN SPA_VERSION_13
478ed9ada0b6efe1318150a700986aa47e6a926dEric Taylor * ZPL version - rev'd whenever an incompatible on-disk format change
f94275ce205810a201404c5f35f4cc96057022b1Adam Leventhal * occurs. This is independent of SPA/DMU/ZAP versioning. You must
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby * also update the version_table[] and help message in zfs_prop.c.
b1b8ab34de515a5e83206da22c3d7e563241b021lling * When changing, be sure to teach GRUB how to read the new format!
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw * See usr/src/grub/grub-0.95/stage2/{zfs-include/,fsys_zfs*}
44cd46cadd9aab751dae6a4023c1cb5bf316d274billm * The following are configuration names used in the nvlist describing a pool's
44cd46cadd9aab751dae6a4023c1cb5bf316d274billm * configuration.
74e7dc986c89efca1f2e4451c7a572e05e4a6e4fMatthew Ahrens#define ZPOOL_CONFIG_NOT_PRESENT "not_present"
e7437265dc2a4920c197ed4337665539d358b22cahrens#define ZPOOL_CONFIG_SUSPENDED "suspended" /* not stored on disk */
e7437265dc2a4920c197ed4337665539d358b22cahrens#define ZPOOL_CONFIG_TIMESTAMP "timestamp" /* not stored on disk */
e7437265dc2a4920c197ed4337665539d358b22cahrens#define ZPOOL_CONFIG_BOOTFS "bootfs" /* not stored on disk */
478ed9ada0b6efe1318150a700986aa47e6a926dEric Taylor * The persistent vdev state is stored as separate values rather than a single
e7437265dc2a4920c197ed4337665539d358b22cahrens * 'vdev_state' entry. This is because a device can be in multiple states, such
e7437265dc2a4920c197ed4337665539d358b22cahrens * as offline and degraded.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * This is needed in userland to report the minimum necessary device size.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The location of the pool configuration repository, shared between kernel and
fa9e4066f08beec538e775443c5be79dd423fcabahrens * userland.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * vdev states are ordered from least to most healthy.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * A vdev that's CANT_OPEN or below is considered unusable.
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef enum vdev_state {
fa9e4066f08beec538e775443c5be79dd423fcabahrens VDEV_STATE_REMOVED, /* Explicitly removed from system */
afefbcddfd8caf5f3b2da510d9439471ab225040eschrock VDEV_STATE_CANT_OPEN, /* Tried to open, but failed */
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock VDEV_STATE_FAULTED, /* External request to fault device */
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock VDEV_STATE_DEGRADED, /* Replicated vdev with unhealthy kids */
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock * vdev aux states. When a vdev is in the CANT_OPEN state, the aux field
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin * of the vdev stats structure uses these constants to distinguish why.
88ecc943b4eb72f7c4fbbd8435997b85ef171fc3George Wilson VDEV_AUX_OPEN_FAILED, /* ldi_open_*() or vn_open() failed */
e14bb3258d05c1b1077e2db7cf77088924e56919Jeff Bonwick VDEV_AUX_CORRUPT_DATA, /* bad label or disk contents */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw VDEV_AUX_NO_REPLICAS, /* insufficient number of replicas */
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 */
fa9e4066f08beec538e775443c5be79dd423fcabahrens * pool state. The following states are written to disk as part of the normal
fa9e4066f08beec538e775443c5be79dd423fcabahrens * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE. The remaining
fa9e4066f08beec538e775443c5be79dd423fcabahrens * states are software abstractions used at various levels to communicate
fa9e4066f08beec538e775443c5be79dd423fcabahrens * pool state.
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef enum pool_state {
88ecc943b4eb72f7c4fbbd8435997b85ef171fc3George Wilson POOL_STATE_EXPORTED, /* Explicitly exported */
fa9e4066f08beec538e775443c5be79dd423fcabahrens POOL_STATE_POTENTIALLY_ACTIVE /* Internal libzfs state */
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Scrub types.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ZIO types. Needed to interpret vdev statistics below.
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef enum zio_type {
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Vdev statistics. Note: all fields should be 64-bit because this
fa9e4066f08beec538e775443c5be79dd423fcabahrens * is passed between kernel and userland as an nvlist uint64 array.
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef struct vdev_stat {
eaca9bbd5f5d1e4e554da4c7108e8a03c8c33481eschrock uint64_t vs_bytes[ZIO_TYPES]; /* bytes read/written */
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint64_t vs_scrub_examined; /* bytes examined; top */
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint64_t vs_scrub_repaired; /* bytes repaired; leaf */
46a2abf27af40eda17a3f97e79eda1aef4e3c3c8eschrock uint64_t vs_scrub_errors; /* errors during scrub */
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * zvol paths. Irritatingly, the devfsadm interfaces want all these
fa9e4066f08beec538e775443c5be79dd423fcabahrens * paths without the /dev prefix, but for some things, we want the
46a2abf27af40eda17a3f97e79eda1aef4e3c3c8eschrock * /dev prefix. Below are the names without /dev.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * And here are the things we need with /dev, etc. in front of them.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * /dev/zfs ioctl numbers.
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef enum zfs_ioc {
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Internal SPA load state. Used by FMA diagnosis engine.
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef enum {
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Bookmark name values.
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define HIS_MAX_RECORD_LEN (MAXPATHLEN + MAXPATHLEN + 1)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The following are names used in the nvlist describing
fa9e4066f08beec538e775443c5be79dd423fcabahrens * the pool's history log.
3cb34c601f3ef3016f638574f5982e80c3735c71ahrens * Flags for ZFS_IOC_VDEV_SET_STATE
55434c770c89aa1b84474f2559a106803511aba0ek * Sysevent payload members. ZFS will generate the following sysevents with the
55434c770c89aa1b84474f2559a106803511aba0ek * given payloads:
b1b8ab34de515a5e83206da22c3d7e563241b021lling * ESC_ZFS_RESILVER_START
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * ESC_ZFS_RESILVER_END
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * ESC_ZFS_POOL_DESTROY
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * ZFS_EV_POOL_NAME DATA_TYPE_STRING
e45ce728996d8e573eecb27f555fb86aaff0cafdahrens * ZFS_EV_POOL_GUID DATA_TYPE_UINT64
148434217c040ea38dc844384f6ba68d9b325906Matthew Ahrens * ESC_ZFS_VDEV_REMOVE
148434217c040ea38dc844384f6ba68d9b325906Matthew Ahrens * ESC_ZFS_VDEV_CLEAR
148434217c040ea38dc844384f6ba68d9b325906Matthew Ahrens * ESC_ZFS_VDEV_CHECK
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby * ZFS_EV_POOL_NAME DATA_TYPE_STRING
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby * ZFS_EV_POOL_GUID DATA_TYPE_UINT64
842727c2f41f01b380de4f5e787d905702870f23Chris Kirby * ZFS_EV_VDEV_PATH DATA_TYPE_STRING (optional)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ZFS_EV_VDEV_GUID DATA_TYPE_UINT64
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock * Note: This is encoded on-disk, so new events must be added to the
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock * end, and unused events can not be removed. Be sure to edit
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock * zpool_main.c: hist_event_table[].
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock#endif /* _SYS_FS_ZFS_H */