Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/openzfs/include/zfeature_common.h
48254 views
1
// SPDX-License-Identifier: CDDL-1.0
2
/*
3
* CDDL HEADER START
4
*
5
* The contents of this file are subject to the terms of the
6
* Common Development and Distribution License (the "License").
7
* You may not use this file except in compliance with the License.
8
*
9
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10
* or https://opensource.org/licenses/CDDL-1.0.
11
* See the License for the specific language governing permissions
12
* and limitations under the License.
13
*
14
* When distributing Covered Code, include this CDDL HEADER in each
15
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16
* If applicable, add the following below this CDDL HEADER, with the
17
* fields enclosed by brackets "[]" replaced with your own identifying
18
* information: Portions Copyright [yyyy] [name of copyright owner]
19
*
20
* CDDL HEADER END
21
*/
22
23
/*
24
* Copyright (c) 2011, 2018 by Delphix. All rights reserved.
25
* Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
26
* Copyright (c) 2013, Joyent, Inc. All rights reserved.
27
* Copyright (c) 2017, Intel Corporation.
28
* Copyright (c) 2024, Klara, Inc.
29
*/
30
31
#ifndef _ZFEATURE_COMMON_H
32
#define _ZFEATURE_COMMON_H extern __attribute__((visibility("default")))
33
34
#include <sys/fs/zfs.h>
35
#include <sys/inttypes.h>
36
#include <sys/types.h>
37
38
#ifdef __cplusplus
39
extern "C" {
40
#endif
41
42
struct zfeature_info;
43
44
typedef enum spa_feature {
45
SPA_FEATURE_NONE = -1,
46
SPA_FEATURE_ASYNC_DESTROY,
47
SPA_FEATURE_EMPTY_BPOBJ,
48
SPA_FEATURE_LZ4_COMPRESS,
49
SPA_FEATURE_MULTI_VDEV_CRASH_DUMP,
50
SPA_FEATURE_SPACEMAP_HISTOGRAM,
51
SPA_FEATURE_ENABLED_TXG,
52
SPA_FEATURE_HOLE_BIRTH,
53
SPA_FEATURE_EXTENSIBLE_DATASET,
54
SPA_FEATURE_EMBEDDED_DATA,
55
SPA_FEATURE_BOOKMARKS,
56
SPA_FEATURE_FS_SS_LIMIT,
57
SPA_FEATURE_LARGE_BLOCKS,
58
SPA_FEATURE_LARGE_DNODE,
59
SPA_FEATURE_SHA512,
60
SPA_FEATURE_SKEIN,
61
SPA_FEATURE_EDONR,
62
SPA_FEATURE_USEROBJ_ACCOUNTING,
63
SPA_FEATURE_ENCRYPTION,
64
SPA_FEATURE_PROJECT_QUOTA,
65
SPA_FEATURE_DEVICE_REMOVAL,
66
SPA_FEATURE_OBSOLETE_COUNTS,
67
SPA_FEATURE_POOL_CHECKPOINT,
68
SPA_FEATURE_SPACEMAP_V2,
69
SPA_FEATURE_ALLOCATION_CLASSES,
70
SPA_FEATURE_RESILVER_DEFER,
71
SPA_FEATURE_BOOKMARK_V2,
72
SPA_FEATURE_REDACTION_BOOKMARKS,
73
SPA_FEATURE_REDACTED_DATASETS,
74
SPA_FEATURE_BOOKMARK_WRITTEN,
75
SPA_FEATURE_LOG_SPACEMAP,
76
SPA_FEATURE_LIVELIST,
77
SPA_FEATURE_DEVICE_REBUILD,
78
SPA_FEATURE_ZSTD_COMPRESS,
79
SPA_FEATURE_DRAID,
80
SPA_FEATURE_ZILSAXATTR,
81
SPA_FEATURE_HEAD_ERRLOG,
82
SPA_FEATURE_BLAKE3,
83
SPA_FEATURE_BLOCK_CLONING,
84
SPA_FEATURE_AVZ_V2,
85
SPA_FEATURE_REDACTION_LIST_SPILL,
86
SPA_FEATURE_RAIDZ_EXPANSION,
87
SPA_FEATURE_FAST_DEDUP,
88
SPA_FEATURE_LONGNAME,
89
SPA_FEATURE_LARGE_MICROZAP,
90
SPA_FEATURE_DYNAMIC_GANG_HEADER,
91
SPA_FEATURE_BLOCK_CLONING_ENDIAN,
92
SPA_FEATURE_PHYSICAL_REWRITE,
93
SPA_FEATURES
94
} spa_feature_t;
95
96
#define SPA_FEATURE_DISABLED (-1ULL)
97
98
typedef enum zfeature_flags {
99
/* Can open pool readonly even if this feature is not supported. */
100
ZFEATURE_FLAG_READONLY_COMPAT = (1 << 0),
101
/*
102
* Is this feature necessary to load the pool? i.e. do we need this
103
* feature to read the full feature list out of the MOS?
104
*/
105
ZFEATURE_FLAG_MOS = (1 << 1),
106
/* Activate this feature at the same time it is enabled. */
107
ZFEATURE_FLAG_ACTIVATE_ON_ENABLE = (1 << 2),
108
/* Each dataset has a field set if it has ever used this feature. */
109
ZFEATURE_FLAG_PER_DATASET = (1 << 3),
110
/*
111
* This feature isn't enabled by zpool upgrade; it must be explicitly
112
* listed to be enabled. It will also be applied if listed in an
113
* explicitly provided compatibility list. This flag can be removed
114
* from a given feature once support is sufficiently widespread, or
115
* worries about backwards compatibility are no longer relevant.
116
*/
117
ZFEATURE_FLAG_NO_UPGRADE = (1 << 4)
118
} zfeature_flags_t;
119
120
typedef enum zfeature_type {
121
ZFEATURE_TYPE_BOOLEAN,
122
ZFEATURE_TYPE_UINT64_ARRAY,
123
ZFEATURE_NUM_TYPES
124
} zfeature_type_t;
125
126
typedef struct zfeature_info {
127
spa_feature_t fi_feature;
128
const char *fi_uname; /* User-facing feature name */
129
const char *fi_guid; /* On-disk feature identifier */
130
const char *fi_desc; /* Feature description */
131
zfeature_flags_t fi_flags;
132
boolean_t fi_zfs_mod_supported; /* supported by running zfs module */
133
zfeature_type_t fi_type; /* Only relevant for PER_DATASET features */
134
/* array of dependencies, terminated by SPA_FEATURE_NONE */
135
const spa_feature_t *fi_depends;
136
} zfeature_info_t;
137
138
typedef int (zfeature_func_t)(zfeature_info_t *, void *);
139
140
#define ZFS_FEATURE_DEBUG
141
142
_ZFEATURE_COMMON_H zfeature_info_t spa_feature_table[SPA_FEATURES];
143
_ZFEATURE_COMMON_H boolean_t zfeature_checks_disable;
144
145
_ZFEATURE_COMMON_H boolean_t zfeature_is_valid_guid(const char *);
146
147
_ZFEATURE_COMMON_H boolean_t zfeature_is_supported(const char *);
148
_ZFEATURE_COMMON_H int zfeature_lookup_guid(const char *, spa_feature_t *);
149
_ZFEATURE_COMMON_H int zfeature_lookup_name(const char *, spa_feature_t *);
150
_ZFEATURE_COMMON_H boolean_t zfeature_depends_on(spa_feature_t, spa_feature_t);
151
152
_ZFEATURE_COMMON_H void zpool_feature_init(void);
153
154
#ifdef __cplusplus
155
}
156
#endif
157
158
#endif /* _ZFEATURE_COMMON_H */
159
160