A cascade of MD reverts occurred late in the v5.10-rcX cycle due to MD
raid10 discard optimizations having introduced potential for corruption. Those reverts exposed a dm-raid.c compiler warning that wasn't ever knowingly introduced. That min_not_zero() type mismatch warning was thought to be safely fixed simply by changing 'struct mddev' to use 'unsigned int' rather than int for chunk_sectors members in that struct. I proposed either using a cast local to dm-raid.c but thought changing the type to 'unsigned int' more correct. While that may be, not enough testing was paired with code review associated with making that change. As such we were left exposed and the result was a report that with v5.10 btrfs on MD RAID6 failed to mount: https://lkml.org/lkml/2020/12/14/7 Given that report, it is justified to simply revert these offending commits. stable@ has already taken steps to revert these for 5.10.1 - this pull request just makes sure mainline does so too. -----BEGIN PGP SIGNATURE----- iQFHBAABCAAxFiEEJfWUX4UqZ4x1O2wixSPxCi2dA1oFAl/XoXMTHHNuaXR6ZXJA cmVkaGF0LmNvbQAKCRDFI/EKLZ0DWtVIB/9GL6t9jz3xCsyECmHG068T4KkqH5yd uczj2UQ7Bjw797WH6D+bDYIbV6GqDDVJ7UTu31oSOB6vObJk0R7ZXq9eVxccFpqI 3eRftQpqF/l5PrDUPgpPUTblhLzSUtggwqfm7gN99HlVZot3WsVrxIRxQYIFVQC7 9o2mjFjrXud6kejZFaXvt9CMgOWDuWx/i2FI6qIhJerMSChjuKMO6h3rCvmw2tqw aS9ZuO/qMBHrd+FiuBVugTUE2zuZX4ixDtQWBnTe8pMX8dNw2dG6FFXFR8WkB9Wa AI1qBcwQgt2c1YmIO2F/AD36uT0fOHqvw5w8xCeJpSlgQCxcx2iN7ec4 =H7tI -----END PGP SIGNATURE----- Merge tag 'for-5.11/revert-problem-v5.10-raid-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm Pull MD regression reverts from Mike Snitzer: "A cascade of MD reverts occurred late in the v5.10-rcX cycle due to MD raid10 discard optimizations having introduced potential for corruption. Those reverts exposed a dm-raid.c compiler warning that wasn't ever knowingly introduced. That min_not_zero() type mismatch warning was thought to be safely fixed simply by changing 'struct mddev' to use 'unsigned int' rather than int for chunk_sectors members in that struct. I proposed either using a cast local to dm-raid.c but thought changing the type to 'unsigned int' more correct. While that may be, not enough testing was paired with code review associated with making that change. As such we were left exposed and the result was a report that with v5.10 btrfs on MD RAID6 failed to mount: https://lkml.org/lkml/2020/12/14/7 Given that report, it is justified to simply revert these offending commits. stable@ has already taken steps to revert these for 5.10.1 - this just makes sure mainline does so too" * tag 'for-5.11/revert-problem-v5.10-raid-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: Revert "dm raid: fix discard limits for raid1 and raid10" Revert "md: change mddev 'chunk_sectors' from int to unsigned"
This commit is contained in:
commit
ae1985b50a
|
@ -3730,14 +3730,12 @@ static void raid_io_hints(struct dm_target *ti, struct queue_limits *limits)
|
|||
blk_limits_io_opt(limits, chunk_size_bytes * mddev_data_stripes(rs));
|
||||
|
||||
/*
|
||||
* RAID10 personality requires bio splitting,
|
||||
* RAID0/1/4/5/6 don't and process large discard bios properly.
|
||||
* RAID1 and RAID10 personalities require bio splitting,
|
||||
* RAID0/4/5/6 don't and process large discard bios properly.
|
||||
*/
|
||||
if (rs_is_raid10(rs)) {
|
||||
limits->discard_granularity = max(chunk_size_bytes,
|
||||
limits->discard_granularity);
|
||||
limits->max_discard_sectors = min_not_zero(rs->md.chunk_sectors,
|
||||
limits->max_discard_sectors);
|
||||
if (rs_is_raid1(rs) || rs_is_raid10(rs)) {
|
||||
limits->discard_granularity = chunk_size_bytes;
|
||||
limits->max_discard_sectors = rs->md.chunk_sectors;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -311,7 +311,7 @@ struct mddev {
|
|||
int external; /* metadata is
|
||||
* managed externally */
|
||||
char metadata_type[17]; /* externally set*/
|
||||
unsigned int chunk_sectors;
|
||||
int chunk_sectors;
|
||||
time64_t ctime, utime;
|
||||
int level, layout;
|
||||
char clevel[16];
|
||||
|
@ -339,7 +339,7 @@ struct mddev {
|
|||
*/
|
||||
sector_t reshape_position;
|
||||
int delta_disks, new_level, new_layout;
|
||||
unsigned int new_chunk_sectors;
|
||||
int new_chunk_sectors;
|
||||
int reshape_backwards;
|
||||
|
||||
struct md_thread *thread; /* management thread */
|
||||
|
|
Loading…
Reference in New Issue