14d3c95f5SJorgen Lundman /* 24d3c95f5SJorgen Lundman * GRUB -- GRand Unified Bootloader 34d3c95f5SJorgen Lundman * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. 44d3c95f5SJorgen Lundman * 5*1a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 64d3c95f5SJorgen Lundman */ 74d3c95f5SJorgen Lundman /* 84d3c95f5SJorgen Lundman * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. 94d3c95f5SJorgen Lundman */ 104d3c95f5SJorgen Lundman 114d3c95f5SJorgen Lundman #ifndef GRUB_ZFS_HEADER 124d3c95f5SJorgen Lundman #define GRUB_ZFS_HEADER 1 134d3c95f5SJorgen Lundman 144d3c95f5SJorgen Lundman 154d3c95f5SJorgen Lundman /* 164d3c95f5SJorgen Lundman * On-disk version number. 174d3c95f5SJorgen Lundman */ 184d3c95f5SJorgen Lundman #define SPA_VERSION 28ULL 194d3c95f5SJorgen Lundman 204d3c95f5SJorgen Lundman /* 214d3c95f5SJorgen Lundman * The following are configuration names used in the nvlist describing a pool's 224d3c95f5SJorgen Lundman * configuration. 234d3c95f5SJorgen Lundman */ 244d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_VERSION "version" 254d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_POOL_NAME "name" 264d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_POOL_STATE "state" 274d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_POOL_TXG "txg" 284d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_POOL_GUID "pool_guid" 294d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_CREATE_TXG "create_txg" 304d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_TOP_GUID "top_guid" 314d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_VDEV_TREE "vdev_tree" 324d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_TYPE "type" 334d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_CHILDREN "children" 344d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_ID "id" 354d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_GUID "guid" 364d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_PATH "path" 374d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_DEVID "devid" 384d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_METASLAB_ARRAY "metaslab_array" 394d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_METASLAB_SHIFT "metaslab_shift" 404d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_ASHIFT "ashift" 414d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_ASIZE "asize" 424d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_DTL "DTL" 434d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_STATS "stats" 444d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_WHOLE_DISK "whole_disk" 454d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_ERRCOUNT "error_count" 464d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_NOT_PRESENT "not_present" 474d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_SPARES "spares" 484d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_IS_SPARE "is_spare" 494d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_NPARITY "nparity" 504d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_PHYS_PATH "phys_path" 514d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_L2CACHE "l2cache" 524d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_HOLE_ARRAY "hole_array" 534d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_VDEV_CHILDREN "vdev_children" 544d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_IS_HOLE "is_hole" 554d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_DDT_HISTOGRAM "ddt_histogram" 564d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_DDT_OBJ_STATS "ddt_object_stats" 574d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_DDT_STATS "ddt_stats" 584d3c95f5SJorgen Lundman /* 594d3c95f5SJorgen Lundman * The persistent vdev state is stored as separate values rather than a single 604d3c95f5SJorgen Lundman * 'vdev_state' entry. This is because a device can be in multiple states, such 614d3c95f5SJorgen Lundman * as offline and degraded. 624d3c95f5SJorgen Lundman */ 634d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_OFFLINE "offline" 644d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_FAULTED "faulted" 654d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_DEGRADED "degraded" 664d3c95f5SJorgen Lundman #define ZPOOL_CONFIG_REMOVED "removed" 674d3c95f5SJorgen Lundman 684d3c95f5SJorgen Lundman #define VDEV_TYPE_ROOT "root" 694d3c95f5SJorgen Lundman #define VDEV_TYPE_MIRROR "mirror" 704d3c95f5SJorgen Lundman #define VDEV_TYPE_REPLACING "replacing" 714d3c95f5SJorgen Lundman #define VDEV_TYPE_RAIDZ "raidz" 724d3c95f5SJorgen Lundman #define VDEV_TYPE_DISK "disk" 734d3c95f5SJorgen Lundman #define VDEV_TYPE_FILE "file" 744d3c95f5SJorgen Lundman #define VDEV_TYPE_MISSING "missing" 754d3c95f5SJorgen Lundman #define VDEV_TYPE_HOLE "hole" 764d3c95f5SJorgen Lundman #define VDEV_TYPE_SPARE "spare" 774d3c95f5SJorgen Lundman #define VDEV_TYPE_L2CACHE "l2cache" 784d3c95f5SJorgen Lundman 794d3c95f5SJorgen Lundman /* 804d3c95f5SJorgen Lundman * pool state. The following states are written to disk as part of the normal 814d3c95f5SJorgen Lundman * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE. The remaining 824d3c95f5SJorgen Lundman * states are software abstractions used at various levels to communicate pool 834d3c95f5SJorgen Lundman * state. 844d3c95f5SJorgen Lundman */ 854d3c95f5SJorgen Lundman typedef enum pool_state { 864d3c95f5SJorgen Lundman POOL_STATE_ACTIVE = 0, /* In active use */ 874d3c95f5SJorgen Lundman POOL_STATE_EXPORTED, /* Explicitly exported */ 884d3c95f5SJorgen Lundman POOL_STATE_DESTROYED, /* Explicitly destroyed */ 894d3c95f5SJorgen Lundman POOL_STATE_SPARE, /* Reserved for hot spare use */ 904d3c95f5SJorgen Lundman POOL_STATE_L2CACHE, /* Level 2 ARC device */ 914d3c95f5SJorgen Lundman POOL_STATE_UNINITIALIZED, /* Internal spa_t state */ 924d3c95f5SJorgen Lundman POOL_STATE_UNAVAIL, /* Internal libzfs state */ 934d3c95f5SJorgen Lundman POOL_STATE_POTENTIALLY_ACTIVE /* Internal libzfs state */ 944d3c95f5SJorgen Lundman } pool_state_t; 954d3c95f5SJorgen Lundman 964d3c95f5SJorgen Lundman struct zfs_data; 974d3c95f5SJorgen Lundman 984d3c95f5SJorgen Lundman int zfs_fetch_nvlist(device_t dev, char **nvlist); 994d3c95f5SJorgen Lundman int zfs_getmdnobj(device_t dev, const char *fsfilename, 1004d3c95f5SJorgen Lundman uint64_t *mdnobj); 1014d3c95f5SJorgen Lundman 1024d3c95f5SJorgen Lundman char *zfs_nvlist_lookup_string(char *nvlist, char *name); 1034d3c95f5SJorgen Lundman char *zfs_nvlist_lookup_nvlist(char *nvlist, char *name); 1044d3c95f5SJorgen Lundman int zfs_nvlist_lookup_uint64(char *nvlist, char *name, 1054d3c95f5SJorgen Lundman uint64_t *out); 1064d3c95f5SJorgen Lundman char *zfs_nvlist_lookup_nvlist_array(char *nvlist, char *name, 1074d3c95f5SJorgen Lundman size_t index); 1084d3c95f5SJorgen Lundman int zfs_nvlist_lookup_nvlist_array_get_nelm(char *nvlist, char *name); 1094d3c95f5SJorgen Lundman 1104d3c95f5SJorgen Lundman #endif /* ! GRUB_ZFS_HEADER */ 111