diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-03-28 18:44:48 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2022-03-28 18:44:48 -0400 |
commit | 61d31d7a02c0aeb46ee203fee9cf3588bc14f0aa (patch) | |
tree | 818cb9fb0c3f81abbf9cd285f6b81597c75eef1a | |
parent | fd249e130f2c7f1e8e13b8d240f8c4ad9a43ed0a (diff) |
Update bcachefs sources to 7786034caa bcachefs: Fix for freespace version upgrade path
-rw-r--r-- | .bcachefs_revision | 2 | ||||
-rw-r--r-- | libbcachefs/alloc_background.c | 13 | ||||
-rw-r--r-- | libbcachefs/recovery.c | 3 |
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); |