3 bug md fixes for 3.20
yet-another-livelock in raid5, and a problem with write errors to 4K-block devices. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIVAwUAVOPorznsnt1WYoG5AQKa5A//RmLurotaJvHt8YA8jzlzo2KY/9jxIv8x jF0CQ0Kva056GG27dlkMPBoddrVk7/WaCoz/ICBKgfSTCpiEFekNlExLkeLXrgUb mKljS/HKhP4KQjiy519HiT2v9BRTqZD3l6P2405qVAZGTymwhelAp3y1I5ZIRFOr k2Uo6PNT/XYvzwWAy5iEBrE7zZl3MZJG5RjW2Wq6JKaWMUQaQERu5OhugWEfCI3U yVomILlwiYqC85WLgrVob/OqCSoA3UsIZkZKvKJCP8Y4C9QJzquEeZy4z0swgJq0 FMsu2WqmI3/ZNFvmlSozN05CEUMkZF6E8hGJcT+f1Wa1NE40zrzDkVsVvsGMD8v0 Ek7PTiA3X7AhqRl4Lt2Gs8kfDJ9MIRXzvXJv9UUO7PtVQGUhVdqmcqsodyqA7+lw 63hgSpEUtQTkpeWwcYQY6Impr/6jGxHwQKzFlLltaDvmAeOBd6gjAq2bdfPO5tox FiSoClhor4yTc274+s5ORk9xDh61d7ZbnFJ+QN7YioyaSD2LHYIl9EkVFDe4OMXV q39VzXt+uEYx6hxfmnpjPyPvPiyuDsnXzoTMcaaGsJL4TOazoIEj5AFGmg5i3/yw 6UVjKxJ43SMM7qg3VbgZpenGJwvRkP5mqQwMNDZICXdWulQTMwM5w3AidNqwYAaU oEPAMfZNGvE= =1BWV -----END PGP SIGNATURE----- Merge tag 'md/3.20-fixes' of git://neil.brown.name/md Pull md bugfixes from Neil Brown: "Three bug md fixes for 3.20 yet-another-livelock in raid5, and a problem with write errors to 4K-block devices" * tag 'md/3.20-fixes' of git://neil.brown.name/md: md/raid5: Fix livelock when array is both resyncing and degraded. md/raid10: round up to bdev_logical_block_size in narrow_write_error. md/raid1: round up to bdev_logical_block_size in narrow_write_error
This commit is contained in:
commit
0d695d6d8b
|
@ -2196,7 +2196,8 @@ static int narrow_write_error(struct r1bio *r1_bio, int i)
|
||||||
if (rdev->badblocks.shift < 0)
|
if (rdev->badblocks.shift < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
block_sectors = 1 << rdev->badblocks.shift;
|
block_sectors = roundup(1 << rdev->badblocks.shift,
|
||||||
|
bdev_logical_block_size(rdev->bdev) >> 9);
|
||||||
sector = r1_bio->sector;
|
sector = r1_bio->sector;
|
||||||
sectors = ((sector + block_sectors)
|
sectors = ((sector + block_sectors)
|
||||||
& ~(sector_t)(block_sectors - 1))
|
& ~(sector_t)(block_sectors - 1))
|
||||||
|
|
|
@ -2572,7 +2572,8 @@ static int narrow_write_error(struct r10bio *r10_bio, int i)
|
||||||
if (rdev->badblocks.shift < 0)
|
if (rdev->badblocks.shift < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
block_sectors = 1 << rdev->badblocks.shift;
|
block_sectors = roundup(1 << rdev->badblocks.shift,
|
||||||
|
bdev_logical_block_size(rdev->bdev) >> 9);
|
||||||
sector = r10_bio->sector;
|
sector = r10_bio->sector;
|
||||||
sectors = ((r10_bio->sector + block_sectors)
|
sectors = ((r10_bio->sector + block_sectors)
|
||||||
& ~(sector_t)(block_sectors - 1))
|
& ~(sector_t)(block_sectors - 1))
|
||||||
|
|
|
@ -3170,7 +3170,8 @@ static void handle_stripe_dirtying(struct r5conf *conf,
|
||||||
* generate correct data from the parity.
|
* generate correct data from the parity.
|
||||||
*/
|
*/
|
||||||
if (conf->max_degraded == 2 ||
|
if (conf->max_degraded == 2 ||
|
||||||
(recovery_cp < MaxSector && sh->sector >= recovery_cp)) {
|
(recovery_cp < MaxSector && sh->sector >= recovery_cp &&
|
||||||
|
s->failed == 0)) {
|
||||||
/* Calculate the real rcw later - for now make it
|
/* Calculate the real rcw later - for now make it
|
||||||
* look like rcw is cheaper
|
* look like rcw is cheaper
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue