]> git.proxmox.com Git - mirror_zfs-debian.git/blobdiff - include/zfeature_common.h
Imported Upstream version 0.6.4.2
[mirror_zfs-debian.git] / include / zfeature_common.h
index 8c104e47fa653c2c53e31d9d520cbcbb5c2611fd..80074db4fbcc83787735f4cf26e53bce8effd25c 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2013 by Delphix. All rights reserved.
  * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
  */
 
@@ -37,33 +37,46 @@ extern "C" {
 
 struct zfeature_info;
 
+typedef enum spa_feature {
+       SPA_FEATURE_NONE = -1,
+       SPA_FEATURE_ASYNC_DESTROY,
+       SPA_FEATURE_EMPTY_BPOBJ,
+       SPA_FEATURE_LZ4_COMPRESS,
+       SPA_FEATURE_SPACEMAP_HISTOGRAM,
+       SPA_FEATURE_ENABLED_TXG,
+       SPA_FEATURE_HOLE_BIRTH,
+       SPA_FEATURE_EXTENSIBLE_DATASET,
+       SPA_FEATURE_EMBEDDED_DATA,
+       SPA_FEATURE_BOOKMARKS,
+       SPA_FEATURES
+} spa_feature_t;
+
+#define        SPA_FEATURE_DISABLED    (-1ULL)
+
 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 */
        boolean_t fi_can_readonly; /* Can open pool readonly w/o support? */
        boolean_t fi_mos;       /* Is the feature necessary to read the MOS? */
-       struct zfeature_info **fi_depends; /* array; null terminated */
+       /* Activate this feature at the same time it is enabled */
+       boolean_t fi_activate_on_enable;
+       /* array of dependencies, terminated by SPA_FEATURE_NONE */
+       const spa_feature_t *fi_depends;
 } zfeature_info_t;
 
-typedef int (zfeature_func_t)(zfeature_info_t *fi, void *arg);
+typedef int (zfeature_func_t)(zfeature_info_t *, void *);
 
 #define        ZFS_FEATURE_DEBUG
 
-typedef enum spa_feature {
-       SPA_FEATURE_ASYNC_DESTROY,
-       SPA_FEATURE_EMPTY_BPOBJ,
-       SPA_FEATURE_LZ4_COMPRESS,
-       SPA_FEATURES
-} spa_feature_t;
-
 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 *, zfeature_info_t **res);
-extern int zfeature_lookup_name(const char *, zfeature_info_t **res);
+extern int zfeature_lookup_name(const char *, spa_feature_t *);
+extern boolean_t zfeature_depends_on(spa_feature_t, spa_feature_t);
 
 extern void zpool_feature_init(void);