diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-01-05 19:39:57 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2022-01-05 19:39:57 -0500 |
commit | 47c554c31abd26a23906b43d756569e64ff60f8d (patch) | |
tree | 41e25ea13636c3218a39422b05eebf77a4d60553 /libbcachefs/buckets.c | |
parent | 931ed5a709c2afa239cbae2e13bc22f13e99713c (diff) |
Update bcachefs sources to 5242db9aec bcachefs: Fix bch2_check_fix_ptrs()
Diffstat (limited to 'libbcachefs/buckets.c')
-rw-r--r-- | libbcachefs/buckets.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/libbcachefs/buckets.c b/libbcachefs/buckets.c index fb0f64f0..895ff255 100644 --- a/libbcachefs/buckets.c +++ b/libbcachefs/buckets.c @@ -1459,22 +1459,24 @@ static int bch2_trans_start_alloc_update(struct btree_trans *trans, struct btree { struct bch_fs *c = trans->c; struct bch_dev *ca = bch_dev_bkey_exists(c, ptr->dev); - struct bkey_s_c k; + struct bpos pos = POS(ptr->dev, PTR_BUCKET_NR(ca, ptr)); + struct bkey_i *update = btree_trans_peek_updates(trans, BTREE_ID_alloc, pos); int ret; - bch2_trans_iter_init(trans, iter, BTREE_ID_alloc, - POS(ptr->dev, PTR_BUCKET_NR(ca, ptr)), - BTREE_ITER_WITH_UPDATES| + bch2_trans_iter_init(trans, iter, BTREE_ID_alloc, pos, BTREE_ITER_CACHED| + BTREE_ITER_CACHED_NOFILL| BTREE_ITER_INTENT); - k = bch2_btree_iter_peek_slot(iter); - ret = bkey_err(k); + ret = bch2_btree_iter_traverse(iter); if (ret) { bch2_trans_iter_exit(trans, iter); return ret; } - *u = bch2_alloc_unpack(k); + *u = update && !bpos_cmp(update->k.p, pos) + ? bch2_alloc_unpack(bkey_i_to_s_c(update)) + : alloc_mem_to_key(c, iter); + return 0; } |