]> git.proxmox.com Git - mirror_zfs.git/blobdiff - include/zfeature_common.h
etc/init.d: decide which variant to use at build time.
[mirror_zfs.git] / include / zfeature_common.h
index acf76381b7c075af9b6fb265c2993c64efc50fac..2515ba321759719835480e9de1fdbb93adc9e64d 100644 (file)
@@ -6,7 +6,7 @@
  * You may not use this file except in compliance with the License.
  *
  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
+ * or https://opensource.org/licenses/CDDL-1.0.
  * See the License for the specific language governing permissions
  * and limitations under the License.
  *
  */
 
 /*
- * Copyright (c) 2011, 2015 by Delphix. All rights reserved.
+ * Copyright (c) 2011, 2018 by Delphix. All rights reserved.
  * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
+ * Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2017, Intel Corporation.
  */
 
 #ifndef _ZFEATURE_COMMON_H
-#define        _ZFEATURE_COMMON_H
+#define        _ZFEATURE_COMMON_H extern __attribute__((visibility("default")))
 
 #include <sys/fs/zfs.h>
 #include <sys/inttypes.h>
@@ -42,6 +44,7 @@ typedef enum spa_feature {
        SPA_FEATURE_ASYNC_DESTROY,
        SPA_FEATURE_EMPTY_BPOBJ,
        SPA_FEATURE_LZ4_COMPRESS,
+       SPA_FEATURE_MULTI_VDEV_CRASH_DUMP,
        SPA_FEATURE_SPACEMAP_HISTOGRAM,
        SPA_FEATURE_ENABLED_TXG,
        SPA_FEATURE_HOLE_BIRTH,
@@ -55,6 +58,30 @@ typedef enum spa_feature {
        SPA_FEATURE_SKEIN,
        SPA_FEATURE_EDONR,
        SPA_FEATURE_USEROBJ_ACCOUNTING,
+       SPA_FEATURE_ENCRYPTION,
+       SPA_FEATURE_PROJECT_QUOTA,
+       SPA_FEATURE_DEVICE_REMOVAL,
+       SPA_FEATURE_OBSOLETE_COUNTS,
+       SPA_FEATURE_POOL_CHECKPOINT,
+       SPA_FEATURE_SPACEMAP_V2,
+       SPA_FEATURE_ALLOCATION_CLASSES,
+       SPA_FEATURE_RESILVER_DEFER,
+       SPA_FEATURE_BOOKMARK_V2,
+       SPA_FEATURE_REDACTION_BOOKMARKS,
+       SPA_FEATURE_REDACTED_DATASETS,
+       SPA_FEATURE_BOOKMARK_WRITTEN,
+       SPA_FEATURE_LOG_SPACEMAP,
+       SPA_FEATURE_LIVELIST,
+       SPA_FEATURE_DEVICE_REBUILD,
+       SPA_FEATURE_ZSTD_COMPRESS,
+       SPA_FEATURE_DRAID,
+       SPA_FEATURE_ZILSAXATTR,
+       SPA_FEATURE_HEAD_ERRLOG,
+       SPA_FEATURE_BLAKE3,
+       SPA_FEATURE_BLOCK_CLONING,
+       SPA_FEATURE_AVZ_V2,
+       SPA_FEATURE_REDACTION_LIST_SPILL,
+       SPA_FEATURE_RAIDZ_EXPANSION,
        SPA_FEATURES
 } spa_feature_t;
 
@@ -63,7 +90,10 @@ typedef enum spa_feature {
 typedef enum zfeature_flags {
        /* Can open pool readonly even if this feature is not supported. */
        ZFEATURE_FLAG_READONLY_COMPAT =         (1 << 0),
-       /* Is this feature necessary to read the MOS? */
+       /*
+        * Is this feature necessary to load the pool? i.e. do we need this
+        * feature to read the full feature list out of the MOS?
+        */
        ZFEATURE_FLAG_MOS =                     (1 << 1),
        /* Activate this feature at the same time it is enabled. */
        ZFEATURE_FLAG_ACTIVATE_ON_ENABLE =      (1 << 2),
@@ -71,12 +101,20 @@ typedef enum zfeature_flags {
        ZFEATURE_FLAG_PER_DATASET =             (1 << 3)
 } zfeature_flags_t;
 
+typedef enum zfeature_type {
+       ZFEATURE_TYPE_BOOLEAN,
+       ZFEATURE_TYPE_UINT64_ARRAY,
+       ZFEATURE_NUM_TYPES
+} zfeature_type_t;
+
 typedef struct zfeature_info {
        spa_feature_t fi_feature;
        const char *fi_uname;   /* User-facing feature name */
        const char *fi_guid;    /* On-disk feature identifier */
        const char *fi_desc;    /* Feature description */
        zfeature_flags_t fi_flags;
+       boolean_t fi_zfs_mod_supported; /* supported by running zfs module */
+       zfeature_type_t fi_type; /* Only relevant for PER_DATASET features */
        /* array of dependencies, terminated by SPA_FEATURE_NONE */
        const spa_feature_t *fi_depends;
 } zfeature_info_t;
@@ -85,15 +123,17 @@ typedef int (zfeature_func_t)(zfeature_info_t *, void *);
 
 #define        ZFS_FEATURE_DEBUG
 
-extern zfeature_info_t spa_feature_table[SPA_FEATURES];
+_ZFEATURE_COMMON_H zfeature_info_t spa_feature_table[SPA_FEATURES];
+_ZFEATURE_COMMON_H boolean_t zfeature_checks_disable;
 
-extern boolean_t zfeature_is_valid_guid(const char *);
+_ZFEATURE_COMMON_H boolean_t zfeature_is_valid_guid(const char *);
 
-extern boolean_t zfeature_is_supported(const char *);
-extern int zfeature_lookup_name(const char *, spa_feature_t *);
-extern boolean_t zfeature_depends_on(spa_feature_t, spa_feature_t);
+_ZFEATURE_COMMON_H boolean_t zfeature_is_supported(const char *);
+_ZFEATURE_COMMON_H int zfeature_lookup_guid(const char *, spa_feature_t *);
+_ZFEATURE_COMMON_H int zfeature_lookup_name(const char *, spa_feature_t *);
+_ZFEATURE_COMMON_H boolean_t zfeature_depends_on(spa_feature_t, spa_feature_t);
 
-extern void zpool_feature_init(void);
+_ZFEATURE_COMMON_H void zpool_feature_init(void);
 
 #ifdef __cplusplus
 }