hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
 *  GRUB  --  GRand Unified Bootloader
 *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
/*
 * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
 */
 
#ifndef    GRUB_ZFS_HEADER
#define    GRUB_ZFS_HEADER 1
 
 
/*
 * On-disk version number.
 */
#define    SPA_VERSION            28ULL
 
/*
 * The following are configuration names used in the nvlist describing a pool's
 * configuration.
 */
#define    ZPOOL_CONFIG_VERSION        "version"
#define    ZPOOL_CONFIG_POOL_NAME        "name"
#define    ZPOOL_CONFIG_POOL_STATE        "state"
#define    ZPOOL_CONFIG_POOL_TXG        "txg"
#define    ZPOOL_CONFIG_POOL_GUID        "pool_guid"
#define    ZPOOL_CONFIG_CREATE_TXG        "create_txg"
#define    ZPOOL_CONFIG_TOP_GUID        "top_guid"
#define    ZPOOL_CONFIG_VDEV_TREE        "vdev_tree"
#define    ZPOOL_CONFIG_TYPE        "type"
#define    ZPOOL_CONFIG_CHILDREN        "children"
#define    ZPOOL_CONFIG_ID            "id"
#define    ZPOOL_CONFIG_GUID        "guid"
#define    ZPOOL_CONFIG_PATH        "path"
#define    ZPOOL_CONFIG_DEVID        "devid"
#define    ZPOOL_CONFIG_METASLAB_ARRAY    "metaslab_array"
#define    ZPOOL_CONFIG_METASLAB_SHIFT    "metaslab_shift"
#define    ZPOOL_CONFIG_ASHIFT        "ashift"
#define    ZPOOL_CONFIG_ASIZE        "asize"
#define    ZPOOL_CONFIG_DTL        "DTL"
#define    ZPOOL_CONFIG_STATS        "stats"
#define    ZPOOL_CONFIG_WHOLE_DISK        "whole_disk"
#define    ZPOOL_CONFIG_ERRCOUNT        "error_count"
#define    ZPOOL_CONFIG_NOT_PRESENT    "not_present"
#define    ZPOOL_CONFIG_SPARES        "spares"
#define    ZPOOL_CONFIG_IS_SPARE        "is_spare"
#define    ZPOOL_CONFIG_NPARITY        "nparity"
#define    ZPOOL_CONFIG_PHYS_PATH        "phys_path"
#define    ZPOOL_CONFIG_L2CACHE        "l2cache"
#define    ZPOOL_CONFIG_HOLE_ARRAY        "hole_array"
#define    ZPOOL_CONFIG_VDEV_CHILDREN    "vdev_children"
#define    ZPOOL_CONFIG_IS_HOLE        "is_hole"
#define    ZPOOL_CONFIG_DDT_HISTOGRAM    "ddt_histogram"
#define    ZPOOL_CONFIG_DDT_OBJ_STATS    "ddt_object_stats"
#define    ZPOOL_CONFIG_DDT_STATS        "ddt_stats"
/*
 * The persistent vdev state is stored as separate values rather than a single
 * 'vdev_state' entry.  This is because a device can be in multiple states, such
 * as offline and degraded.
 */
#define    ZPOOL_CONFIG_OFFLINE        "offline"
#define    ZPOOL_CONFIG_FAULTED        "faulted"
#define    ZPOOL_CONFIG_DEGRADED        "degraded"
#define    ZPOOL_CONFIG_REMOVED        "removed"
 
#define    VDEV_TYPE_ROOT            "root"
#define    VDEV_TYPE_MIRROR        "mirror"
#define    VDEV_TYPE_REPLACING        "replacing"
#define    VDEV_TYPE_RAIDZ            "raidz"
#define    VDEV_TYPE_DISK            "disk"
#define    VDEV_TYPE_FILE            "file"
#define    VDEV_TYPE_MISSING        "missing"
#define    VDEV_TYPE_HOLE            "hole"
#define    VDEV_TYPE_SPARE            "spare"
#define    VDEV_TYPE_L2CACHE        "l2cache"
 
/*
 * pool state.  The following states are written to disk as part of the normal
 * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE.  The remaining
 * states are software abstractions used at various levels to communicate pool
 * state.
 */
typedef enum pool_state {
   POOL_STATE_ACTIVE = 0,        /* In active use        */
   POOL_STATE_EXPORTED,        /* Explicitly exported        */
   POOL_STATE_DESTROYED,        /* Explicitly destroyed        */
   POOL_STATE_SPARE,        /* Reserved for hot spare use    */
   POOL_STATE_L2CACHE,        /* Level 2 ARC device        */
   POOL_STATE_UNINITIALIZED,    /* Internal spa_t state        */
   POOL_STATE_UNAVAIL,        /* Internal libzfs state    */
   POOL_STATE_POTENTIALLY_ACTIVE    /* Internal libzfs state    */
} pool_state_t;
 
struct zfs_data;
 
int zfs_fetch_nvlist(device_t dev, char **nvlist);
int zfs_getmdnobj(device_t dev, const char *fsfilename,
                  uint64_t *mdnobj);
 
char *zfs_nvlist_lookup_string(char *nvlist, char *name);
char *zfs_nvlist_lookup_nvlist(char *nvlist, char *name);
int zfs_nvlist_lookup_uint64(char *nvlist, char *name,
                  uint64_t *out);
char *zfs_nvlist_lookup_nvlist_array(char *nvlist, char *name,
                      size_t index);
int zfs_nvlist_lookup_nvlist_array_get_nelm(char *nvlist, char *name);
 
#endif    /* ! GRUB_ZFS_HEADER */