]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/migrate.c
Update bcachefs sources to d868a87c67 bcachefs: fix initial gc
[bcachefs-tools-debian] / libbcachefs / migrate.c
index 58d7d3a30cd539e5eeeda9d8fd871613c2c447c6..88761d34dc65d4216b577df11446c4c729065bcc 100644 (file)
@@ -51,7 +51,7 @@ static int bch2_dev_usrdata_drop(struct bch_fs *c, unsigned dev_idx, int flags)
 
 
        while ((k = bch2_btree_iter_peek(iter)).k &&
-              !(ret = btree_iter_err(k))) {
+              !(ret = bkey_err(k))) {
                if (!bkey_extent_is_data(k.k) ||
                    !bch2_extent_has_device(bkey_s_c_to_extent(k), dev_idx)) {
                        ret = bch2_mark_bkey_replicas(c, k);
@@ -105,7 +105,8 @@ static int bch2_dev_usrdata_drop(struct bch_fs *c, unsigned dev_idx, int flags)
 
 static int bch2_dev_metadata_drop(struct bch_fs *c, unsigned dev_idx, int flags)
 {
-       struct btree_iter iter;
+       struct btree_trans trans;
+       struct btree_iter *iter;
        struct closure cl;
        struct btree *b;
        unsigned id;
@@ -115,13 +116,15 @@ static int bch2_dev_metadata_drop(struct bch_fs *c, unsigned dev_idx, int flags)
        if (flags & BCH_FORCE_IF_METADATA_LOST)
                return -EINVAL;
 
+       bch2_trans_init(&trans, c);
        closure_init_stack(&cl);
 
        mutex_lock(&c->replicas_gc_lock);
        bch2_replicas_gc_start(c, 1 << BCH_DATA_BTREE);
 
        for (id = 0; id < BTREE_ID_NR; id++) {
-               for_each_btree_node(&iter, c, id, POS_MIN, BTREE_ITER_PREFETCH, b) {
+               for_each_btree_node(&trans, iter, id, POS_MIN,
+                                   BTREE_ITER_PREFETCH, b) {
                        __BKEY_PADDED(k, BKEY_BTREE_PTR_VAL_U64s_MAX) tmp;
                        struct bkey_i_btree_ptr *new_key;
 retry:
@@ -133,7 +136,7 @@ retry:
                                 * but got -EINTR after upgrading the iter, but
                                 * then raced and the node is now gone:
                                 */
-                               bch2_btree_iter_downgrade(&iter);
+                               bch2_btree_iter_downgrade(iter);
 
                                ret = bch2_mark_bkey_replicas(c, bkey_i_to_s_c(&b->key));
                                if (ret)
@@ -147,16 +150,16 @@ retry:
                                if (ret)
                                        goto err;
 
-                               ret = bch2_btree_node_update_key(c, &iter, b, new_key);
+                               ret = bch2_btree_node_update_key(c, iter, b, new_key);
                                if (ret == -EINTR) {
-                                       b = bch2_btree_iter_peek_node(&iter);
+                                       b = bch2_btree_iter_peek_node(iter);
                                        goto retry;
                                }
                                if (ret)
                                        goto err;
                        }
                }
-               bch2_btree_iter_unlock(&iter);
+               bch2_trans_iter_free(&trans, iter);
        }
 
        /* flush relevant btree updates */
@@ -170,14 +173,13 @@ retry:
        }
 
        ret = 0;
-out:
+err:
+       bch2_trans_exit(&trans);
+
        ret = bch2_replicas_gc_end(c, ret);
        mutex_unlock(&c->replicas_gc_lock);
 
        return ret;
-err:
-       bch2_btree_iter_unlock(&iter);
-       goto out;
 }
 
 int bch2_dev_data_drop(struct bch_fs *c, unsigned dev_idx, int flags)