diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-01-20 23:02:56 +0100 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 23:09:49 +0200 |
commit | 7c909f654bae57083a0965f105e52ac8737a0785 (patch) | |
tree | 5e2c709c91589cc25272b920c1158a80d4ecad8e /fs | |
parent | bcachefs: Dump transaction updates before panicing (diff) | |
download | linux-7c909f654bae57083a0965f105e52ac8737a0785.tar.xz linux-7c909f654bae57083a0965f105e52ac8737a0785.zip |
bcachefs: Fix repair path in bch2_mark_reflink_p()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/bcachefs/buckets.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/fs/bcachefs/buckets.c b/fs/bcachefs/buckets.c index 4fd396cb1dad..6c9dcfd54be6 100644 --- a/fs/bcachefs/buckets.c +++ b/fs/bcachefs/buckets.c @@ -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; |