bcachefs: bcachefs_metadata_version_autofix_errors
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 10 Dec 2024 19:19:30 +0000 (14:19 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Fri, 10 Jan 2025 04:38:41 +0000 (23:38 -0500)
It's time to make self healing the default: change the error action for
old filesystems to fix_safe, matching the default for current
filesystems.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/bcachefs_format.h
fs/bcachefs/recovery.c

index 09e53bef1a304427b74d63027251b556874c65cd..b0fac8b7915bb2ffb54a885a1a80fc26e0bb3b98 100644 (file)
@@ -684,7 +684,8 @@ struct bch_sb_field_ext {
        x(disk_accounting_big_endian,   BCH_VERSION(1, 15))             \
        x(reflink_p_may_update_opts,    BCH_VERSION(1, 16))             \
        x(inode_depth,                  BCH_VERSION(1, 17))             \
-       x(persistent_inode_cursors,     BCH_VERSION(1, 18))
+       x(persistent_inode_cursors,     BCH_VERSION(1, 18))             \
+       x(autofix_errors,               BCH_VERSION(1, 19))
 
 enum bcachefs_metadata_version {
        bcachefs_metadata_version_min = 9,
index 383e03606d6e50d3048009a7a673ab2fd60db361..98825437381c65bc6638b00e720f523c05b12279 100644 (file)
@@ -781,6 +781,11 @@ int bch2_fs_recovery(struct bch_fs *c)
 
        c->opts.recovery_passes |= bch2_recovery_passes_from_stable(le64_to_cpu(ext->recovery_passes_required[0]));
 
+       if (c->sb.version_upgrade_complete < bcachefs_metadata_version_autofix_errors) {
+               SET_BCH_SB_ERROR_ACTION(c->disk_sb.sb, BCH_ON_ERROR_fix_safe);
+               write_sb = true;
+       }
+
        if (write_sb)
                bch2_write_super(c);
        mutex_unlock(&c->sb_lock);