]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/reflink.c
Fixes tests which have broken since 'list' improvements
[bcachefs-tools-debian] / libbcachefs / reflink.c
index 4de65bf70362e8d0354538bdea61c8bd80475249..3c473f1380a6bdedd4c5b77d66bb45f63bd5d300 100644 (file)
@@ -115,7 +115,7 @@ static int bch2_make_extent_indirect(struct btree_trans *trans,
        r_v->v.refcount = 0;
        memcpy(r_v->v.start, e->v.start, bkey_val_bytes(&e->k));
 
-       bch2_trans_update(trans, reflink_iter, &r_v->k_i);
+       bch2_trans_update(trans, reflink_iter, &r_v->k_i, 0);
 
        r_p = bch2_trans_kmalloc(trans, sizeof(*r_p));
        if (IS_ERR(r_p))
@@ -126,12 +126,11 @@ static int bch2_make_extent_indirect(struct btree_trans *trans,
        set_bkey_val_bytes(&r_p->k, sizeof(r_p->v));
        r_p->v.idx = cpu_to_le64(bkey_start_offset(&r_v->k));
 
-       bch2_trans_update(trans, extent_iter, &r_p->k_i);
+       bch2_trans_update(trans, extent_iter, &r_p->k_i, 0);
 err:
-       if (!IS_ERR(reflink_iter)) {
+       if (!IS_ERR(reflink_iter))
                c->reflink_hint = reflink_iter->pos.offset;
-               bch2_trans_iter_put(trans, reflink_iter);
-       }
+       bch2_trans_iter_put(trans, reflink_iter);
 
        return ret;
 }
@@ -168,19 +167,13 @@ s64 bch2_remap_range(struct bch_fs *c,
        u64 src_done, dst_done;
        int ret = 0, ret2 = 0;
 
+       if (!c->opts.reflink)
+               return -EOPNOTSUPP;
+
        if (!percpu_ref_tryget(&c->writes))
                return -EROFS;
 
-       if (!(c->sb.features & (1ULL << BCH_FEATURE_REFLINK))) {
-               mutex_lock(&c->sb_lock);
-               if (!(c->sb.features & (1ULL << BCH_FEATURE_REFLINK))) {
-                       c->disk_sb.sb->features[0] |=
-                               cpu_to_le64(1ULL << BCH_FEATURE_REFLINK);
-
-                       bch2_write_super(c);
-               }
-               mutex_unlock(&c->sb_lock);
-       }
+       bch2_check_set_feature(c, BCH_FEATURE_reflink);
 
        dst_end.offset += remap_sectors;
        src_end.offset += remap_sectors;
@@ -194,7 +187,8 @@ s64 bch2_remap_range(struct bch_fs *c,
                                       BTREE_ITER_INTENT);
 
        while (1) {
-               bch2_trans_begin_updates(&trans);
+               bch2_trans_begin(&trans);
+
                trans.mem_top = 0;
 
                if (fatal_signal_pending(current)) {
@@ -225,8 +219,7 @@ s64 bch2_remap_range(struct bch_fs *c,
                        break;
 
                if (src_k.k->type == KEY_TYPE_extent) {
-                       bkey_on_stack_realloc(&new_src, c, src_k.k->u64s);
-                       bkey_reassemble(new_src.k, src_k);
+                       bkey_on_stack_reassemble(&new_src, c, src_k);
                        src_k = bkey_i_to_s_c(new_src.k);
 
                        bch2_cut_front(src_iter->pos,   new_src.k);
@@ -297,8 +290,7 @@ err:
                    inode_u.bi_size < new_i_size) {
                        inode_u.bi_size = new_i_size;
                        ret2  = bch2_inode_write(&trans, inode_iter, &inode_u) ?:
-                               bch2_trans_commit(&trans, NULL, journal_seq,
-                                                 BTREE_INSERT_ATOMIC);
+                               bch2_trans_commit(&trans, NULL, journal_seq, 0);
                }
        } while (ret2 == -EINTR);