xref: /rk3399_rockchip-uboot/include/zfs/zfs.h (revision 4d3c95f5ea7c737a21cd6b9c59435ee693b3f127)
1*4d3c95f5SJorgen Lundman /*
2*4d3c95f5SJorgen Lundman  *  GRUB  --  GRand Unified Bootloader
3*4d3c95f5SJorgen Lundman  *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
4*4d3c95f5SJorgen Lundman  *
5*4d3c95f5SJorgen Lundman  *  This program is free software; you can redistribute it and/or modify
6*4d3c95f5SJorgen Lundman  *  it under the terms of the GNU General Public License as published by
7*4d3c95f5SJorgen Lundman  *  the Free Software Foundation; either version 2 of the License, or
8*4d3c95f5SJorgen Lundman  *  (at your option) any later version.
9*4d3c95f5SJorgen Lundman  *
10*4d3c95f5SJorgen Lundman  *  This program is distributed in the hope that it will be useful,
11*4d3c95f5SJorgen Lundman  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12*4d3c95f5SJorgen Lundman  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*4d3c95f5SJorgen Lundman  *  GNU General Public License for more details.
14*4d3c95f5SJorgen Lundman  *
15*4d3c95f5SJorgen Lundman  *  You should have received a copy of the GNU General Public License
16*4d3c95f5SJorgen Lundman  *  along with this program; if not, write to the Free Software
17*4d3c95f5SJorgen Lundman  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18*4d3c95f5SJorgen Lundman  */
19*4d3c95f5SJorgen Lundman /*
20*4d3c95f5SJorgen Lundman  * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
21*4d3c95f5SJorgen Lundman  */
22*4d3c95f5SJorgen Lundman 
23*4d3c95f5SJorgen Lundman #ifndef	GRUB_ZFS_HEADER
24*4d3c95f5SJorgen Lundman #define	GRUB_ZFS_HEADER 1
25*4d3c95f5SJorgen Lundman 
26*4d3c95f5SJorgen Lundman 
27*4d3c95f5SJorgen Lundman /*
28*4d3c95f5SJorgen Lundman  * On-disk version number.
29*4d3c95f5SJorgen Lundman  */
30*4d3c95f5SJorgen Lundman #define	SPA_VERSION			28ULL
31*4d3c95f5SJorgen Lundman 
32*4d3c95f5SJorgen Lundman /*
33*4d3c95f5SJorgen Lundman  * The following are configuration names used in the nvlist describing a pool's
34*4d3c95f5SJorgen Lundman  * configuration.
35*4d3c95f5SJorgen Lundman  */
36*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_VERSION		"version"
37*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_POOL_NAME		"name"
38*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_POOL_STATE		"state"
39*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_POOL_TXG		"txg"
40*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_POOL_GUID		"pool_guid"
41*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_CREATE_TXG		"create_txg"
42*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_TOP_GUID		"top_guid"
43*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_VDEV_TREE		"vdev_tree"
44*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_TYPE		"type"
45*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_CHILDREN		"children"
46*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_ID			"id"
47*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_GUID		"guid"
48*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_PATH		"path"
49*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DEVID		"devid"
50*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_METASLAB_ARRAY	"metaslab_array"
51*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_METASLAB_SHIFT	"metaslab_shift"
52*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_ASHIFT		"ashift"
53*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_ASIZE		"asize"
54*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DTL		"DTL"
55*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_STATS		"stats"
56*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_WHOLE_DISK		"whole_disk"
57*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_ERRCOUNT		"error_count"
58*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_NOT_PRESENT	"not_present"
59*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_SPARES		"spares"
60*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_IS_SPARE		"is_spare"
61*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_NPARITY		"nparity"
62*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_PHYS_PATH		"phys_path"
63*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_L2CACHE		"l2cache"
64*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_HOLE_ARRAY		"hole_array"
65*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_VDEV_CHILDREN	"vdev_children"
66*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_IS_HOLE		"is_hole"
67*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DDT_HISTOGRAM	"ddt_histogram"
68*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DDT_OBJ_STATS	"ddt_object_stats"
69*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DDT_STATS		"ddt_stats"
70*4d3c95f5SJorgen Lundman /*
71*4d3c95f5SJorgen Lundman  * The persistent vdev state is stored as separate values rather than a single
72*4d3c95f5SJorgen Lundman  * 'vdev_state' entry.  This is because a device can be in multiple states, such
73*4d3c95f5SJorgen Lundman  * as offline and degraded.
74*4d3c95f5SJorgen Lundman  */
75*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_OFFLINE		"offline"
76*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_FAULTED		"faulted"
77*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DEGRADED		"degraded"
78*4d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_REMOVED		"removed"
79*4d3c95f5SJorgen Lundman 
80*4d3c95f5SJorgen Lundman #define	VDEV_TYPE_ROOT			"root"
81*4d3c95f5SJorgen Lundman #define	VDEV_TYPE_MIRROR		"mirror"
82*4d3c95f5SJorgen Lundman #define	VDEV_TYPE_REPLACING		"replacing"
83*4d3c95f5SJorgen Lundman #define	VDEV_TYPE_RAIDZ			"raidz"
84*4d3c95f5SJorgen Lundman #define	VDEV_TYPE_DISK			"disk"
85*4d3c95f5SJorgen Lundman #define	VDEV_TYPE_FILE			"file"
86*4d3c95f5SJorgen Lundman #define	VDEV_TYPE_MISSING		"missing"
87*4d3c95f5SJorgen Lundman #define	VDEV_TYPE_HOLE			"hole"
88*4d3c95f5SJorgen Lundman #define	VDEV_TYPE_SPARE			"spare"
89*4d3c95f5SJorgen Lundman #define	VDEV_TYPE_L2CACHE		"l2cache"
90*4d3c95f5SJorgen Lundman 
91*4d3c95f5SJorgen Lundman /*
92*4d3c95f5SJorgen Lundman  * pool state.  The following states are written to disk as part of the normal
93*4d3c95f5SJorgen Lundman  * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE.  The remaining
94*4d3c95f5SJorgen Lundman  * states are software abstractions used at various levels to communicate pool
95*4d3c95f5SJorgen Lundman  * state.
96*4d3c95f5SJorgen Lundman  */
97*4d3c95f5SJorgen Lundman typedef enum pool_state {
98*4d3c95f5SJorgen Lundman 	POOL_STATE_ACTIVE = 0,		/* In active use		*/
99*4d3c95f5SJorgen Lundman 	POOL_STATE_EXPORTED,		/* Explicitly exported		*/
100*4d3c95f5SJorgen Lundman 	POOL_STATE_DESTROYED,		/* Explicitly destroyed		*/
101*4d3c95f5SJorgen Lundman 	POOL_STATE_SPARE,		/* Reserved for hot spare use	*/
102*4d3c95f5SJorgen Lundman 	POOL_STATE_L2CACHE,		/* Level 2 ARC device		*/
103*4d3c95f5SJorgen Lundman 	POOL_STATE_UNINITIALIZED,	/* Internal spa_t state		*/
104*4d3c95f5SJorgen Lundman 	POOL_STATE_UNAVAIL,		/* Internal libzfs state	*/
105*4d3c95f5SJorgen Lundman 	POOL_STATE_POTENTIALLY_ACTIVE	/* Internal libzfs state	*/
106*4d3c95f5SJorgen Lundman } pool_state_t;
107*4d3c95f5SJorgen Lundman 
108*4d3c95f5SJorgen Lundman struct zfs_data;
109*4d3c95f5SJorgen Lundman 
110*4d3c95f5SJorgen Lundman int zfs_fetch_nvlist(device_t dev, char **nvlist);
111*4d3c95f5SJorgen Lundman int zfs_getmdnobj(device_t dev, const char *fsfilename,
112*4d3c95f5SJorgen Lundman 			       uint64_t *mdnobj);
113*4d3c95f5SJorgen Lundman 
114*4d3c95f5SJorgen Lundman char *zfs_nvlist_lookup_string(char *nvlist, char *name);
115*4d3c95f5SJorgen Lundman char *zfs_nvlist_lookup_nvlist(char *nvlist, char *name);
116*4d3c95f5SJorgen Lundman int zfs_nvlist_lookup_uint64(char *nvlist, char *name,
117*4d3c95f5SJorgen Lundman 				   uint64_t *out);
118*4d3c95f5SJorgen Lundman char *zfs_nvlist_lookup_nvlist_array(char *nvlist, char *name,
119*4d3c95f5SJorgen Lundman 					   size_t index);
120*4d3c95f5SJorgen Lundman int zfs_nvlist_lookup_nvlist_array_get_nelm(char *nvlist, char *name);
121*4d3c95f5SJorgen Lundman 
122*4d3c95f5SJorgen Lundman #endif	/* ! GRUB_ZFS_HEADER */
123