summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bcachefs_revision2
-rw-r--r--libbcachefs/alloc_background.c13
-rw-r--r--libbcachefs/recovery.c3
3 files changed, 14 insertions, 4 deletions
diff --git a/.bcachefs_revision b/.bcachefs_revision
index 901b02da..4a20b817 100644
--- a/.bcachefs_revision
+++ b/.bcachefs_revision
@@ -1 +1 @@
-bba7493dda9d1a0a9741fff88aff2228af3f4fc0
+7786034caa4ee7d10d25202284220513c0944ce2
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)
diff --git a/libbcachefs/recovery.c b/libbcachefs/recovery.c
index 66492dde..68612d52 100644
--- a/libbcachefs/recovery.c
+++ b/libbcachefs/recovery.c
@@ -1174,8 +1174,7 @@ use_clean:
bch_verbose(c, "done checking allocations");
}
- if (c->opts.fsck &&
- c->sb.version >= bcachefs_metadata_version_freespace) {
+ if (c->opts.fsck) {
bch_info(c, "checking need_discard and freespace btrees");
err = "error checking need_discard and freespace btrees";
ret = bch2_check_alloc_info(c, true);