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

bcachefs: fix simulateously upgrading & downgrading

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

+12 -3
+12 -3
fs/bcachefs/super-io.c
··· 1088 1088 /* 1089 1089 * Downgrade, if superblock is at a higher version than currently 1090 1090 * supported: 1091 + * 1092 + * c->sb will be checked before we write the superblock, so update it as 1093 + * well: 1091 1094 */ 1092 - if (BCH_SB_VERSION_UPGRADE_COMPLETE(c->disk_sb.sb) > bcachefs_metadata_version_current) 1095 + if (BCH_SB_VERSION_UPGRADE_COMPLETE(c->disk_sb.sb) > bcachefs_metadata_version_current) { 1093 1096 SET_BCH_SB_VERSION_UPGRADE_COMPLETE(c->disk_sb.sb, bcachefs_metadata_version_current); 1094 - if (c->sb.version > bcachefs_metadata_version_current) 1097 + c->sb.version_upgrade_complete = bcachefs_metadata_version_current; 1098 + } 1099 + if (c->sb.version > bcachefs_metadata_version_current) { 1095 1100 c->disk_sb.sb->version = cpu_to_le16(bcachefs_metadata_version_current); 1096 - if (c->sb.version_min > bcachefs_metadata_version_current) 1101 + c->sb.version = bcachefs_metadata_version_current; 1102 + } 1103 + if (c->sb.version_min > bcachefs_metadata_version_current) { 1097 1104 c->disk_sb.sb->version_min = cpu_to_le16(bcachefs_metadata_version_current); 1105 + c->sb.version_min = bcachefs_metadata_version_current; 1106 + } 1098 1107 c->disk_sb.sb->compat[0] &= cpu_to_le64((1ULL << BCH_COMPAT_NR) - 1); 1099 1108 return ret; 1100 1109 }