bcachefs: Fix repair path in bch2_mark_reflink_p()
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 20 Jan 2023 22:02:56 +0000 (17:02 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:49 +0000 (17:09 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/buckets.c

index 4fd396cb1dade5f48570fb692ba0173c0424a328..6c9dcfd54be65df84a780ea164198b4bb4b23d27 100644 (file)
@@ -1213,17 +1213,23 @@ not_found:
                     "  missing range %llu-%llu",
                     (bch2_bkey_val_to_text(&buf, c, p.s_c), buf.buf),
                     *idx, next_idx)) {
-               struct bkey_i_error new;
-
-               bkey_init(&new.k);
-               new.k.type      = KEY_TYPE_error;
-               new.k.p         = bkey_start_pos(p.k);
-               new.k.p.offset += *idx - start;
-               bch2_key_resize(&new.k, next_idx - *idx);
-               ret = __bch2_btree_insert(trans, BTREE_ID_extents, &new.k_i);
+               struct bkey_i_error *new;
+
+               new = bch2_trans_kmalloc(trans, sizeof(*new));
+               ret = PTR_ERR_OR_ZERO(new);
+               if (ret)
+                       goto err;
+
+               bkey_init(&new->k);
+               new->k.type     = KEY_TYPE_error;
+               new->k.p                = bkey_start_pos(p.k);
+               new->k.p.offset += *idx - start;
+               bch2_key_resize(&new->k, next_idx - *idx);
+               ret = __bch2_btree_insert(trans, BTREE_ID_extents, &new->k_i);
        }
 
        *idx = next_idx;
+err:
 fsck_err:
        printbuf_exit(&buf);
        return ret;