]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
bcachefs: fix deletion of indirect extents in btree_gc
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 10 Mar 2024 20:24:16 +0000 (16:24 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 14 Mar 2024 01:22:26 +0000 (21:22 -0400)
we need to run the normal extent update path on deletion -
bch2_bkey_make_mut() is incorrect when key type is changing.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_gc.c

index b7085e996c440c0212c5d767ac02d5229dca4b42..0e1ef8bef997835b521f069f8ecabc12a63efdcf 100644 (file)
@@ -1586,8 +1586,7 @@ static int bch2_gc_write_reflink_key(struct btree_trans *trans,
                        "  should be %u",
                        (bch2_bkey_val_to_text(&buf, c, k), buf.buf),
                        r->refcount)) {
-               struct bkey_i *new = bch2_bkey_make_mut(trans, iter, &k, 0);
-
+               struct bkey_i *new = bch2_bkey_make_mut_noupdate(trans, k);
                ret = PTR_ERR_OR_ZERO(new);
                if (ret)
                        return ret;
@@ -1596,6 +1595,7 @@ static int bch2_gc_write_reflink_key(struct btree_trans *trans,
                        new->k.type = KEY_TYPE_deleted;
                else
                        *bkey_refcount(bkey_i_to_s(new)) = cpu_to_le64(r->refcount);
+               ret = bch2_trans_update(trans, iter, new, 0);
        }
 fsck_err:
        printbuf_exit(&buf);