11b8adde7SWilliam Kucharski /*
21b8adde7SWilliam Kucharski  *  GRUB  --  GRand Unified Bootloader
31b8adde7SWilliam Kucharski  *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
41b8adde7SWilliam Kucharski  *
51b8adde7SWilliam Kucharski  *  This program is free software; you can redistribute it and/or modify
61b8adde7SWilliam Kucharski  *  it under the terms of the GNU General Public License as published by
71b8adde7SWilliam Kucharski  *  the Free Software Foundation; either version 2 of the License, or
81b8adde7SWilliam Kucharski  *  (at your option) any later version.
91b8adde7SWilliam Kucharski  *
101b8adde7SWilliam Kucharski  *  This program is distributed in the hope that it will be useful,
111b8adde7SWilliam Kucharski  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
121b8adde7SWilliam Kucharski  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
131b8adde7SWilliam Kucharski  *  GNU General Public License for more details.
141b8adde7SWilliam Kucharski  *
151b8adde7SWilliam Kucharski  *  You should have received a copy of the GNU General Public License
161b8adde7SWilliam Kucharski  *  along with this program; if not, write to the Free Software
171b8adde7SWilliam Kucharski  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
181b8adde7SWilliam Kucharski  */
19*ad135b5dSChristopher Siden 
201b8adde7SWilliam Kucharski /*
213f9d6ad7SLin Ling  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
22*ad135b5dSChristopher Siden  * Copyright (c) 2012 by Delphix. All rights reserved.
231b8adde7SWilliam Kucharski  */
241b8adde7SWilliam Kucharski 
251b8adde7SWilliam Kucharski #ifndef	_SYS_FS_ZFS_H
261b8adde7SWilliam Kucharski #define	_SYS_FS_ZFS_H
271b8adde7SWilliam Kucharski 
281b8adde7SWilliam Kucharski /*
291b8adde7SWilliam Kucharski  * On-disk version number.
301b8adde7SWilliam Kucharski  */
31*ad135b5dSChristopher Siden #define	SPA_VERSION_INITIAL		1ULL
32*ad135b5dSChristopher Siden #define	SPA_VERSION_BEFORE_FEATURES	28ULL
33*ad135b5dSChristopher Siden #define	SPA_VERSION			5000ULL
34*ad135b5dSChristopher Siden #define	SPA_VERSION_FEATURES		5000ULL
35*ad135b5dSChristopher Siden 
36*ad135b5dSChristopher Siden #define	SPA_VERSION_IS_SUPPORTED(v) \
37*ad135b5dSChristopher Siden 	(((v) >= SPA_VERSION_INITIAL && (v) <= SPA_VERSION_BEFORE_FEATURES) || \
38*ad135b5dSChristopher Siden 	((v) >= SPA_VERSION_FEATURES && (v) <= SPA_VERSION))
391b8adde7SWilliam Kucharski 
401b8adde7SWilliam Kucharski /*
411b8adde7SWilliam Kucharski  * The following are configuration names used in the nvlist describing a pool's
421b8adde7SWilliam Kucharski  * configuration.
431b8adde7SWilliam Kucharski  */
441b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_VERSION		"version"
451b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_POOL_NAME		"name"
461b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_POOL_STATE		"state"
471b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_POOL_TXG		"txg"
481b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_POOL_GUID		"pool_guid"
491b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_CREATE_TXG		"create_txg"
501b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_TOP_GUID		"top_guid"
511b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_VDEV_TREE		"vdev_tree"
521b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_TYPE		"type"
531b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_CHILDREN		"children"
541b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_ID			"id"
551b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_GUID		"guid"
561b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_PATH		"path"
571b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_DEVID		"devid"
581b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_METASLAB_ARRAY	"metaslab_array"
591b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_METASLAB_SHIFT	"metaslab_shift"
601b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_ASHIFT		"ashift"
611b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_ASIZE		"asize"
621b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_DTL		"DTL"
631b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_STATS		"stats"
641b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_WHOLE_DISK		"whole_disk"
651b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_ERRCOUNT		"error_count"
661b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_NOT_PRESENT	"not_present"
671b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_SPARES		"spares"
681b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_IS_SPARE		"is_spare"
691b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_NPARITY		"nparity"
701b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_PHYS_PATH		"phys_path"
711b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_L2CACHE		"l2cache"
7288ecc943SGeorge Wilson #define	ZPOOL_CONFIG_HOLE_ARRAY		"hole_array"
7388ecc943SGeorge Wilson #define	ZPOOL_CONFIG_VDEV_CHILDREN	"vdev_children"
7488ecc943SGeorge Wilson #define	ZPOOL_CONFIG_IS_HOLE		"is_hole"
759eb19f4dSGeorge Wilson #define	ZPOOL_CONFIG_DDT_HISTOGRAM	"ddt_histogram"
769eb19f4dSGeorge Wilson #define	ZPOOL_CONFIG_DDT_OBJ_STATS	"ddt_object_stats"
779eb19f4dSGeorge Wilson #define	ZPOOL_CONFIG_DDT_STATS		"ddt_stats"
78*ad135b5dSChristopher Siden #define	ZPOOL_CONFIG_FEATURES_FOR_READ	"features_for_read"
791b8adde7SWilliam Kucharski /*
801b8adde7SWilliam Kucharski  * The persistent vdev state is stored as separate values rather than a single
811b8adde7SWilliam Kucharski  * 'vdev_state' entry.  This is because a device can be in multiple states, such
821b8adde7SWilliam Kucharski  * as offline and degraded.
831b8adde7SWilliam Kucharski  */
841b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_OFFLINE		"offline"
851b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_FAULTED		"faulted"
861b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_DEGRADED		"degraded"
871b8adde7SWilliam Kucharski #define	ZPOOL_CONFIG_REMOVED		"removed"
881b8adde7SWilliam Kucharski 
891b8adde7SWilliam Kucharski #define	VDEV_TYPE_ROOT			"root"
901b8adde7SWilliam Kucharski #define	VDEV_TYPE_MIRROR		"mirror"
911b8adde7SWilliam Kucharski #define	VDEV_TYPE_REPLACING		"replacing"
921b8adde7SWilliam Kucharski #define	VDEV_TYPE_RAIDZ			"raidz"
931b8adde7SWilliam Kucharski #define	VDEV_TYPE_DISK			"disk"
941b8adde7SWilliam Kucharski #define	VDEV_TYPE_FILE			"file"
951b8adde7SWilliam Kucharski #define	VDEV_TYPE_MISSING		"missing"
9688ecc943SGeorge Wilson #define	VDEV_TYPE_HOLE			"hole"
971b8adde7SWilliam Kucharski #define	VDEV_TYPE_SPARE			"spare"
981b8adde7SWilliam Kucharski #define	VDEV_TYPE_L2CACHE		"l2cache"
991b8adde7SWilliam Kucharski 
1001b8adde7SWilliam Kucharski /*
1011b8adde7SWilliam Kucharski  * pool state.  The following states are written to disk as part of the normal
1021b8adde7SWilliam Kucharski  * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE.  The remaining
1031b8adde7SWilliam Kucharski  * states are software abstractions used at various levels to communicate pool
1041b8adde7SWilliam Kucharski  * state.
1051b8adde7SWilliam Kucharski  */
1061b8adde7SWilliam Kucharski typedef enum pool_state {
1071b8adde7SWilliam Kucharski 	POOL_STATE_ACTIVE = 0,		/* In active use		*/
1081b8adde7SWilliam Kucharski 	POOL_STATE_EXPORTED,		/* Explicitly exported		*/
1091b8adde7SWilliam Kucharski 	POOL_STATE_DESTROYED,		/* Explicitly destroyed		*/
1101b8adde7SWilliam Kucharski 	POOL_STATE_SPARE,		/* Reserved for hot spare use	*/
1111b8adde7SWilliam Kucharski 	POOL_STATE_L2CACHE,		/* Level 2 ARC device		*/
1121b8adde7SWilliam Kucharski 	POOL_STATE_UNINITIALIZED,	/* Internal spa_t state		*/
1131b8adde7SWilliam Kucharski 	POOL_STATE_UNAVAIL,		/* Internal libzfs state	*/
1141b8adde7SWilliam Kucharski 	POOL_STATE_POTENTIALLY_ACTIVE	/* Internal libzfs state	*/
1151b8adde7SWilliam Kucharski } pool_state_t;
1161b8adde7SWilliam Kucharski 
1171b8adde7SWilliam Kucharski #endif	/* _SYS_FS_ZFS_H */
118