summaryrefslogtreecommitdiff
path: root/fs/bcachefs/recovery.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-10-19 17:30:16 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:09:14 -0400
commitbfe88863cf3063204fc49a04307fa6635554d6e3 (patch)
tree9a4450a72e868234cf45822312ced571efab3a61 /fs/bcachefs/recovery.c
parentb71717dac64d76879ba3c70cfcfccf57991205f8 (diff)
downloadlwn-bfe88863cf3063204fc49a04307fa6635554d6e3.tar.gz
lwn-bfe88863cf3063204fc49a04307fa6635554d6e3.zip
bcachefs: New on disk format to fix reflink_p pointers
We had a bug where reflink_p pointers weren't being initialized to 0, and when we started using the second word, things broke badly. This patch revs the on disk format version and adds cleanup code to zero out the second word of reflink_p pointers before we start using it. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs/recovery.c')
-rw-r--r--fs/bcachefs/recovery.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c
index 6afb37a2e1b0..8c53b1e977d1 100644
--- a/fs/bcachefs/recovery.c
+++ b/fs/bcachefs/recovery.c
@@ -1086,12 +1086,10 @@ int bch2_fs_recovery(struct bch_fs *c)
c->opts.version_upgrade = true;
c->opts.fsck = true;
c->opts.fix_errors = FSCK_OPT_YES;
- } else if (c->sb.version < bcachefs_metadata_version_btree_ptr_sectors_written) {
- bch_info(c, "version prior to btree_ptr_sectors_written, upgrade required");
- c->opts.version_upgrade = true;
- } else if (c->sb.version < bcachefs_metadata_version_snapshot_2) {
- bch_info(c, "filesystem version is prior to snapshots - upgrading");
+ } else if (c->sb.version < bcachefs_metadata_version_reflink_p_fix) {
+ bch_info(c, "filesystem version is prior to reflink_p fix - upgrading");
c->opts.version_upgrade = true;
+ c->opts.fsck = true;
}
ret = bch2_blacklist_table_initialize(c);