Print this page
4171 clean up spa_feature_*() interfaces
4172 implement extensible_dataset feature for use by other zpool features
Reviewed by: Max Grossman <max.grossman@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/common/zfs/zfeature_common.h
          +++ new/usr/src/common/zfs/zfeature_common.h
↓ open down ↓ 30 lines elided ↑ open up ↑
  31   31  #include <sys/fs/zfs.h>
  32   32  #include <sys/inttypes.h>
  33   33  #include <sys/types.h>
  34   34  
  35   35  #ifdef  __cplusplus
  36   36  extern "C" {
  37   37  #endif
  38   38  
  39   39  struct zfeature_info;
  40   40  
       41 +typedef enum spa_feature {
       42 +        SPA_FEATURE_NONE = -1,
       43 +        SPA_FEATURE_ASYNC_DESTROY,
       44 +        SPA_FEATURE_EMPTY_BPOBJ,
       45 +        SPA_FEATURE_LZ4_COMPRESS,
       46 +        SPA_FEATURE_MULTI_VDEV_CRASH_DUMP,
       47 +        SPA_FEATURE_SPACEMAP_HISTOGRAM,
       48 +        SPA_FEATURE_EXTENSIBLE_DATASET,
       49 +        SPA_FEATURES
       50 +} spa_feature_t;
       51 +
  41   52  typedef struct zfeature_info {
       53 +        spa_feature_t fi_feature;
  42   54          const char *fi_uname;   /* User-facing feature name */
  43   55          const char *fi_guid;    /* On-disk feature identifier */
  44   56          const char *fi_desc;    /* Feature description */
  45   57          boolean_t fi_can_readonly; /* Can open pool readonly w/o support? */
  46   58          boolean_t fi_mos;       /* Is the feature necessary to read the MOS? */
  47      -        struct zfeature_info **fi_depends; /* array; null terminated */
       59 +        /* array of dependencies, terminated by SPA_FEATURE_NONE */
       60 +        const spa_feature_t *fi_depends;
  48   61  } zfeature_info_t;
  49   62  
  50   63  typedef int (zfeature_func_t)(zfeature_info_t *fi, void *arg);
  51   64  
  52   65  #define ZFS_FEATURE_DEBUG
  53   66  
  54      -enum spa_feature {
  55      -        SPA_FEATURE_ASYNC_DESTROY,
  56      -        SPA_FEATURE_EMPTY_BPOBJ,
  57      -        SPA_FEATURE_LZ4_COMPRESS,
  58      -        SPA_FEATURE_MULTI_VDEV_CRASH_DUMP,
  59      -        SPA_FEATURE_SPACEMAP_HISTOGRAM,
  60      -        SPA_FEATURES
  61      -} spa_feature_t;
  62      -
  63   67  extern zfeature_info_t spa_feature_table[SPA_FEATURES];
  64   68  
  65   69  extern boolean_t zfeature_is_valid_guid(const char *);
  66   70  
  67   71  extern boolean_t zfeature_is_supported(const char *);
  68      -extern int zfeature_lookup_guid(const char *, zfeature_info_t **res);
  69      -extern int zfeature_lookup_name(const char *, zfeature_info_t **res);
       72 +extern int zfeature_lookup_name(const char *name, spa_feature_t *res);
  70   73  
  71   74  extern void zpool_feature_init(void);
  72   75  
  73   76  #ifdef  __cplusplus
  74   77  }
  75   78  #endif
  76   79  
  77   80  #endif  /* _ZFEATURE_COMMON_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX