Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

bcachefs: Fix check_version_upgrade()

When also downgrading, check_version_upgrade() could pick a new version
greater than the latest supported version.

Fixes:
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>

+6 -5
+6 -5
fs/bcachefs/recovery.c
··· 577 577 578 578 static bool check_version_upgrade(struct bch_fs *c) 579 579 { 580 - unsigned latest_compatible = bch2_latest_compatible_version(c->sb.version); 581 580 unsigned latest_version = bcachefs_metadata_version_current; 581 + unsigned latest_compatible = min(latest_version, 582 + bch2_latest_compatible_version(c->sb.version)); 582 583 unsigned old_version = c->sb.version_upgrade_complete ?: c->sb.version; 583 584 unsigned new_version = 0; 584 585 ··· 598 597 new_version = latest_version; 599 598 break; 600 599 case BCH_VERSION_UPGRADE_none: 601 - new_version = old_version; 600 + new_version = min(old_version, latest_version); 602 601 break; 603 602 } 604 603 } ··· 775 774 goto err; 776 775 } 777 776 778 - if (!(c->opts.nochanges && c->opts.norecovery)) { 777 + if (!c->opts.nochanges) { 779 778 mutex_lock(&c->sb_lock); 780 779 bool write_sb = false; 781 780 ··· 805 804 if (bch2_check_version_downgrade(c)) { 806 805 struct printbuf buf = PRINTBUF; 807 806 808 - prt_str(&buf, "Version downgrade required:\n"); 807 + prt_str(&buf, "Version downgrade required:"); 809 808 810 809 __le64 passes = ext->recovery_passes_required[0]; 811 810 bch2_sb_set_downgrade(c, ··· 813 812 BCH_VERSION_MINOR(c->sb.version)); 814 813 passes = ext->recovery_passes_required[0] & ~passes; 815 814 if (passes) { 816 - prt_str(&buf, " running recovery passes: "); 815 + prt_str(&buf, "\n running recovery passes: "); 817 816 prt_bitflags(&buf, bch2_recovery_passes, 818 817 bch2_recovery_passes_from_stable(le64_to_cpu(passes))); 819 818 }