summaryrefslogtreecommitdiff
path: root/libbcachefs/alloc_background.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2022-03-28 18:44:48 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2022-03-28 18:44:48 -0400
commit61d31d7a02c0aeb46ee203fee9cf3588bc14f0aa (patch)
tree818cb9fb0c3f81abbf9cd285f6b81597c75eef1a /libbcachefs/alloc_background.c
parentfd249e130f2c7f1e8e13b8d240f8c4ad9a43ed0a (diff)
Update bcachefs sources to 7786034caa bcachefs: Fix for freespace version upgrade path
Diffstat (limited to 'libbcachefs/alloc_background.c')
-rw-r--r--libbcachefs/alloc_background.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/libbcachefs/alloc_background.c b/libbcachefs/alloc_background.c
index 0c334243..81cbfeb5 100644
--- a/libbcachefs/alloc_background.c
+++ b/libbcachefs/alloc_background.c
@@ -724,12 +724,23 @@ int bch2_check_alloc_info(struct bch_fs *c, bool initial)
struct btree_trans trans;
struct btree_iter iter;
struct bkey_s_c k;
- int ret = 0;
+ int ret = 0, last_dev = -1;
bch2_trans_init(&trans, c, 0, 0);
for_each_btree_key(&trans, iter, BTREE_ID_alloc, POS_MIN,
BTREE_ITER_PREFETCH, k, ret) {
+ if (k.k->p.inode != last_dev) {
+ struct bch_dev *ca = bch_dev_bkey_exists(c, k.k->p.inode);
+
+ if (!ca->mi.freespace_initialized) {
+ bch2_btree_iter_set_pos(&iter, POS(k.k->p.inode + 1, 0));
+ continue;
+ }
+
+ last_dev = k.k->p.inode;
+ }
+
ret = __bch2_trans_do(&trans, NULL, NULL, 0,
bch2_check_alloc_key(&trans, &iter));
if (ret)