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>

@@ -100,11 +100,11 @@
          * make sure that the scan_async_destroying flag is initialized
          * appropriately.
          */
         ASSERT(!scn->scn_async_destroying);
         scn->scn_async_destroying = spa_feature_is_active(dp->dp_spa,
-            &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY]);
+            SPA_FEATURE_ASYNC_DESTROY);
 
         err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT,
             "scrub_func", sizeof (uint64_t), 1, &f);
         if (err == 0) {
                 /*

@@ -1351,11 +1351,10 @@
 
         if (spa->spa_load_state != SPA_LOAD_NONE)
                 return (B_FALSE);
         if (spa_shutting_down(spa))
                 return (B_FALSE);
-
         if (scn->scn_phys.scn_state == DSS_SCANNING ||
             scn->scn_async_destroying)
                 return (B_TRUE);
 
         if (spa_version(scn->scn_dp->dp_spa) >= SPA_VERSION_DEADLISTS) {

@@ -1410,11 +1409,11 @@
                 err = bpobj_iterate(&dp->dp_free_bpobj,
                     dsl_scan_free_block_cb, scn, tx);
                 VERIFY3U(0, ==, zio_wait(scn->scn_zio_root));
 
                 if (err == 0 && spa_feature_is_active(spa,
-                    &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY])) {
+                    SPA_FEATURE_ASYNC_DESTROY)) {
                         ASSERT(scn->scn_async_destroying);
                         scn->scn_is_bptree = B_TRUE;
                         scn->scn_zio_root = zio_root(dp->dp_spa, NULL,
                             NULL, ZIO_FLAG_MUSTSUCCEED);
                         err = bptree_iterate(dp->dp_meta_objset,

@@ -1421,15 +1420,15 @@
                             dp->dp_bptree_obj, B_TRUE, dsl_scan_free_block_cb,
                             scn, tx);
                         VERIFY0(zio_wait(scn->scn_zio_root));
 
                         if (err == 0) {
-                                zfeature_info_t *feat = &spa_feature_table
-                                    [SPA_FEATURE_ASYNC_DESTROY];
                                 /* finished; deactivate async destroy feature */
-                                spa_feature_decr(spa, feat, tx);
-                                ASSERT(!spa_feature_is_active(spa, feat));
+                                spa_feature_decr(spa, SPA_FEATURE_ASYNC_DESTROY,
+                                    tx);
+                                ASSERT(!spa_feature_is_active(spa,
+                                    SPA_FEATURE_ASYNC_DESTROY));
                                 VERIFY0(zap_remove(dp->dp_meta_objset,
                                     DMU_POOL_DIRECTORY_OBJECT,
                                     DMU_POOL_BPTREE_OBJ, tx));
                                 VERIFY0(bptree_free(dp->dp_meta_objset,
                                     dp->dp_bptree_obj, tx));