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>

@@ -240,11 +240,11 @@
 static int zfs_fill_zplprops_root(uint64_t, nvlist_t *, nvlist_t *,
     boolean_t *);
 int zfs_set_prop_nvlist(const char *, zprop_source_t, nvlist_t *, nvlist_t *);
 static int get_nvlist(uint64_t nvl, uint64_t size, int iflag, nvlist_t **nvp);
 
-static int zfs_prop_activate_feature(spa_t *spa, zfeature_info_t *feature);
+static int zfs_prop_activate_feature(spa_t *spa, spa_feature_t feature);
 
 /* _NOTE(PRINTFLIKE(4)) - this is printf-like, but lint is too whiney */
 void
 __dprintf(const char *file, const char *func, int line, const char *fmt, ...)
 {

@@ -2380,24 +2380,23 @@
                 break;
         }
         case ZFS_PROP_COMPRESSION:
         {
                 if (intval == ZIO_COMPRESS_LZ4) {
-                        zfeature_info_t *feature =
-                            &spa_feature_table[SPA_FEATURE_LZ4_COMPRESS];
                         spa_t *spa;
 
                         if ((err = spa_open(dsname, &spa, FTAG)) != 0)
                                 return (err);
 
                         /*
                          * Setting the LZ4 compression algorithm activates
                          * the feature.
                          */
-                        if (!spa_feature_is_active(spa, feature)) {
+                        if (!spa_feature_is_active(spa,
+                            SPA_FEATURE_LZ4_COMPRESS)) {
                                 if ((err = zfs_prop_activate_feature(spa,
-                                    feature)) != 0) {
+                                    SPA_FEATURE_LZ4_COMPRESS)) != 0) {
                                         spa_close(spa, FTAG);
                                         return (err);
                                 }
                         }
 

@@ -3661,19 +3660,17 @@
                             zfs_earlier_version(dsname,
                             SPA_VERSION_ZLE_COMPRESSION))
                                 return (SET_ERROR(ENOTSUP));
 
                         if (intval == ZIO_COMPRESS_LZ4) {
-                                zfeature_info_t *feature =
-                                    &spa_feature_table[
-                                    SPA_FEATURE_LZ4_COMPRESS];
                                 spa_t *spa;
 
                                 if ((err = spa_open(dsname, &spa, FTAG)) != 0)
                                         return (err);
 
-                                if (!spa_feature_is_enabled(spa, feature)) {
+                                if (!spa_feature_is_enabled(spa,
+                                    SPA_FEATURE_LZ4_COMPRESS)) {
                                         spa_close(spa, FTAG);
                                         return (SET_ERROR(ENOTSUP));
                                 }
                                 spa_close(spa, FTAG);
                         }

@@ -3727,13 +3724,13 @@
  */
 static int
 zfs_prop_activate_feature_check(void *arg, dmu_tx_t *tx)
 {
         spa_t *spa = dmu_tx_pool(tx)->dp_spa;
-        zfeature_info_t *feature = arg;
+        spa_feature_t *featurep = arg;
 
-        if (!spa_feature_is_active(spa, feature))
+        if (!spa_feature_is_active(spa, *featurep))
                 return (0);
         else
                 return (SET_ERROR(EBUSY));
 }
 

@@ -3743,29 +3740,29 @@
  */
 static void
 zfs_prop_activate_feature_sync(void *arg, dmu_tx_t *tx)
 {
         spa_t *spa = dmu_tx_pool(tx)->dp_spa;
-        zfeature_info_t *feature = arg;
+        spa_feature_t *featurep = arg;
 
-        spa_feature_incr(spa, feature, tx);
+        spa_feature_incr(spa, *featurep, tx);
 }
 
 /*
  * Activates a feature on a pool in response to a property setting. This
  * creates a new sync task which modifies the pool to reflect the feature
  * as being active.
  */
 static int
-zfs_prop_activate_feature(spa_t *spa, zfeature_info_t *feature)
+zfs_prop_activate_feature(spa_t *spa, spa_feature_t feature)
 {
         int err;
 
         /* EBUSY here indicates that the feature is already active */
         err = dsl_sync_task(spa_name(spa),
             zfs_prop_activate_feature_check, zfs_prop_activate_feature_sync,
-            feature, 2);
+            &feature, 2);
 
         if (err != 0 && err != EBUSY)
                 return (err);
         else
                 return (0);