From: Kent Overstreet Date: Thu, 10 Feb 2022 08:40:44 +0000 (-0500) Subject: bcachefs: Fix reflink repair code X-Git-Tag: v6.7-rc1~201^2~1152 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=aa8982c3f2cbfca89fb73daad9d6e65f7be022c2;p=thirdparty%2Fkernel%2Flinux.git bcachefs: Fix reflink repair code The reflink repair code was incorrectly inserting a nonzero deleted key via journal replay - this is due to bch2_journal_key_insert() being somewhat hacky, and so this fix is also hacky for now. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_gc.c b/fs/bcachefs/btree_gc.c index 9c33341c79474..d1fbe3b77379a 100644 --- a/fs/bcachefs/btree_gc.c +++ b/fs/bcachefs/btree_gc.c @@ -1501,10 +1501,18 @@ static int bch2_gc_reflink_done(struct bch_fs *c, bool initial, bkey_reassemble(new, k); - if (!r->refcount) + if (!r->refcount) { new->k.type = KEY_TYPE_deleted; - else + /* + * XXX ugly: bch2_journal_key_insert() queues up + * the key for the journal replay code, which + * doesn't run the extent overwrite pass + */ + if (initial) + new->k.size = 0; + } else { *bkey_refcount(new) = cpu_to_le64(r->refcount); + } ret = initial ? bch2_journal_key_insert(c, BTREE_ID_stripes, 0, new)