]> git.proxmox.com Git - mirror_zfs.git/blobdiff - include/zfeature_common.h
Linux 5.0 compat: ASM_BUG macro
[mirror_zfs.git] / include / zfeature_common.h
index d481a28a8ffe1b8a90c89e1696ea8aa54e75fc0d..4e75fe71e341d138df23036d8f9853064ac506c6 100644 (file)
  */
 
 /*
- * 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
@@ -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,
@@ -50,6 +53,20 @@ typedef enum spa_feature {
        SPA_FEATURE_BOOKMARKS,
        SPA_FEATURE_FS_SS_LIMIT,
        SPA_FEATURE_LARGE_BLOCKS,
+       SPA_FEATURE_LARGE_DNODE,
+       SPA_FEATURE_SHA512,
+       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_FEATURES
 } spa_feature_t;
 
@@ -58,7 +75,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),
@@ -66,12 +86,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,6 +113,7 @@ extern zfeature_info_t spa_feature_table[SPA_FEATURES];
 extern boolean_t zfeature_is_valid_guid(const char *);
 
 extern boolean_t zfeature_is_supported(const char *);
+extern int zfeature_lookup_guid(const char *, spa_feature_t *);
 extern int zfeature_lookup_name(const char *, spa_feature_t *);
 extern boolean_t zfeature_depends_on(spa_feature_t, spa_feature_t);