]> git.proxmox.com Git - mirror_zfs-debian.git/blobdiff - module/zfs/zfeature.c
New upstream version 0.7.2
[mirror_zfs-debian.git] / module / zfs / zfeature.c
index 352376f22b9ed8a097efd37bb52d67a86ddb9b0c..d8220aa235a816b8e4f31cb95b278a1622a680eb 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright (c) 2013 by Delphix. All rights reserved.
+ * Copyright (c) 2011, 2015 by Delphix. All rights reserved.
  */
 
 #include <sys/zfs_context.h>
@@ -253,7 +253,7 @@ feature_get_refcount_from_disk(spa_t *spa, zfeature_info_t *feature,
 {
        int err;
        uint64_t refcount;
-       uint64_t zapobj = feature->fi_can_readonly ?
+       uint64_t zapobj = (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ?
            spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj;
 
        /*
@@ -277,7 +277,8 @@ feature_get_refcount_from_disk(spa_t *spa, zfeature_info_t *feature,
 
 
 static int
-feature_get_enabled_txg(spa_t *spa, zfeature_info_t *feature, uint64_t *res) {
+feature_get_enabled_txg(spa_t *spa, zfeature_info_t *feature, uint64_t *res)
+{
        ASSERTV(uint64_t enabled_txg_obj = spa->spa_feat_enabled_txg_obj);
 
        ASSERT(zfeature_depends_on(feature->fi_feature,
@@ -306,7 +307,7 @@ feature_sync(spa_t *spa, zfeature_info_t *feature, uint64_t refcount,
        uint64_t zapobj;
 
        ASSERT(VALID_FEATURE_OR_NONE(feature->fi_feature));
-       zapobj = feature->fi_can_readonly ?
+       zapobj = (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ?
            spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj;
        VERIFY0(zap_update(spa->spa_meta_objset, zapobj, feature->fi_guid,
            sizeof (uint64_t), 1, &refcount, tx));
@@ -327,7 +328,7 @@ feature_sync(spa_t *spa, zfeature_info_t *feature, uint64_t refcount,
 
        if (refcount == 0)
                spa_deactivate_mos_feature(spa, feature->fi_guid);
-       else if (feature->fi_mos)
+       else if (feature->fi_flags & ZFEATURE_FLAG_MOS)
                spa_activate_mos_feature(spa, feature->fi_guid, tx);
 }
 
@@ -338,8 +339,9 @@ feature_sync(spa_t *spa, zfeature_info_t *feature, uint64_t refcount,
 void
 feature_enable_sync(spa_t *spa, zfeature_info_t *feature, dmu_tx_t *tx)
 {
-       uint64_t initial_refcount = feature->fi_activate_on_enable ? 1 : 0;
-       uint64_t zapobj = feature->fi_can_readonly ?
+       uint64_t initial_refcount =
+           (feature->fi_flags & ZFEATURE_FLAG_ACTIVATE_ON_ENABLE) ? 1 : 0;
+       uint64_t zapobj = (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ?
            spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj;
        int i;
 
@@ -385,7 +387,8 @@ feature_do_action(spa_t *spa, spa_feature_t fid, feature_action_t action,
 {
        uint64_t refcount = 0;
        zfeature_info_t *feature = &spa_feature_table[fid];
-       ASSERTV(uint64_t zapobj = feature->fi_can_readonly ?
+       ASSERTV(uint64_t zapobj =
+           (feature->fi_flags & ZFEATURE_FLAG_READONLY_COMPAT) ?
            spa->spa_feat_for_write_obj : spa->spa_feat_for_read_obj);
 
        ASSERT(VALID_FEATURE_FID(fid));
@@ -498,7 +501,8 @@ spa_feature_is_active(spa_t *spa, spa_feature_t fid)
  * Returns B_FALSE otherwise (i.e. if the feature is not enabled).
  */
 boolean_t
-spa_feature_enabled_txg(spa_t *spa, spa_feature_t fid, uint64_t *txg) {
+spa_feature_enabled_txg(spa_t *spa, spa_feature_t fid, uint64_t *txg)
+{
        int err;
 
        ASSERT(VALID_FEATURE_FID(fid));