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.c
          +++ new/usr/src/common/zfs/zfeature_common.c
↓ open down ↓ 84 lines elided ↑ open up ↑
  85   85  
  86   86          return (has_colon);
  87   87  }
  88   88  
  89   89  boolean_t
  90   90  zfeature_is_supported(const char *guid)
  91   91  {
  92   92          if (zfeature_checks_disable)
  93   93                  return (B_TRUE);
  94   94  
  95      -        return (0 == zfeature_lookup_guid(guid, NULL));
  96      -}
  97      -
  98      -int
  99      -zfeature_lookup_guid(const char *guid, zfeature_info_t **res)
 100      -{
 101      -        for (int i = 0; i < SPA_FEATURES; i++) {
       95 +        for (spa_feature_t i = 0; i < SPA_FEATURES; i++) {
 102   96                  zfeature_info_t *feature = &spa_feature_table[i];
 103      -                if (strcmp(guid, feature->fi_guid) == 0) {
 104      -                        if (res != NULL)
 105      -                                *res = feature;
 106      -                        return (0);
 107      -                }
       97 +                if (strcmp(guid, feature->fi_guid) == 0)
       98 +                        return (B_TRUE);
 108   99          }
 109      -
 110      -        return (ENOENT);
      100 +        return (B_FALSE);
 111  101  }
 112  102  
 113  103  int
 114      -zfeature_lookup_name(const char *name, zfeature_info_t **res)
      104 +zfeature_lookup_name(const char *name, spa_feature_t *res)
 115  105  {
 116      -        for (int i = 0; i < SPA_FEATURES; i++) {
      106 +        for (spa_feature_t i = 0; i < SPA_FEATURES; i++) {
 117  107                  zfeature_info_t *feature = &spa_feature_table[i];
 118  108                  if (strcmp(name, feature->fi_uname) == 0) {
 119  109                          if (res != NULL)
 120      -                                *res = feature;
      110 +                                *res = i;
 121  111                          return (0);
 122  112                  }
 123  113          }
 124  114  
 125  115          return (ENOENT);
 126  116  }
 127  117  
 128  118  static void
 129      -zfeature_register(int fid, const char *guid, const char *name, const char *desc,
 130      -    boolean_t readonly, boolean_t mos, zfeature_info_t **deps)
      119 +zfeature_register(spa_feature_t fid, const char *guid, const char *name,
      120 +    const char *desc, boolean_t readonly, boolean_t mos,
      121 +    const spa_feature_t *deps)
 131  122  {
 132  123          zfeature_info_t *feature = &spa_feature_table[fid];
 133      -        static zfeature_info_t *nodeps[] = { NULL };
      124 +        static spa_feature_t nodeps[] = { SPA_FEATURE_NONE };
 134  125  
 135  126          ASSERT(name != NULL);
 136  127          ASSERT(desc != NULL);
 137  128          ASSERT(!readonly || !mos);
 138  129          ASSERT3U(fid, <, SPA_FEATURES);
 139  130          ASSERT(zfeature_is_valid_guid(guid));
 140  131  
 141  132          if (deps == NULL)
 142  133                  deps = nodeps;
 143  134  
      135 +        feature->fi_feature = fid;
 144  136          feature->fi_guid = guid;
 145  137          feature->fi_uname = name;
 146  138          feature->fi_desc = desc;
 147  139          feature->fi_can_readonly = readonly;
 148  140          feature->fi_mos = mos;
 149  141          feature->fi_depends = deps;
 150  142  }
 151  143  
 152  144  void
 153  145  zpool_feature_init(void)
↓ open down ↓ 6 lines elided ↑ open up ↑
 160  152              "Snapshots use less space.", B_TRUE, B_FALSE, NULL);
 161  153          zfeature_register(SPA_FEATURE_LZ4_COMPRESS,
 162  154              "org.illumos:lz4_compress", "lz4_compress",
 163  155              "LZ4 compression algorithm support.", B_FALSE, B_FALSE, NULL);
 164  156          zfeature_register(SPA_FEATURE_MULTI_VDEV_CRASH_DUMP,
 165  157              "com.joyent:multi_vdev_crash_dump", "multi_vdev_crash_dump",
 166  158              "Crash dumps to multiple vdev pools.", B_FALSE, B_FALSE, NULL);
 167  159          zfeature_register(SPA_FEATURE_SPACEMAP_HISTOGRAM,
 168  160              "com.delphix:spacemap_histogram", "spacemap_histogram",
 169  161              "Spacemaps maintain space histograms.", B_TRUE, B_FALSE, NULL);
      162 +        zfeature_register(SPA_FEATURE_EXTENSIBLE_DATASET,
      163 +            "com.delphix:extensible_dataset", "extensible_dataset",
      164 +            "Enhanced dataset functionality, used by other features.",
      165 +            B_FALSE, B_FALSE, NULL);
 170  166  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX