diff options
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/raid1.c | 3 | ||||
-rw-r--r-- | drivers/md/raid10.c | 3 | ||||
-rw-r--r-- | drivers/md/raid5.c | 3 |
3 files changed, 6 insertions, 3 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 5dd0c2e59ab9..4153da5d4011 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -2196,7 +2196,8 @@ static int narrow_write_error(struct r1bio *r1_bio, int i) | |||
2196 | if (rdev->badblocks.shift < 0) | 2196 | if (rdev->badblocks.shift < 0) |
2197 | return 0; | 2197 | return 0; |
2198 | 2198 | ||
2199 | block_sectors = 1 << rdev->badblocks.shift; | 2199 | block_sectors = roundup(1 << rdev->badblocks.shift, |
2200 | bdev_logical_block_size(rdev->bdev) >> 9); | ||
2200 | sector = r1_bio->sector; | 2201 | sector = r1_bio->sector; |
2201 | sectors = ((sector + block_sectors) | 2202 | sectors = ((sector + block_sectors) |
2202 | & ~(sector_t)(block_sectors - 1)) | 2203 | & ~(sector_t)(block_sectors - 1)) |
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index b8d76b1fba64..a7196c49d15d 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
@@ -2572,7 +2572,8 @@ static int narrow_write_error(struct r10bio *r10_bio, int i) | |||
2572 | if (rdev->badblocks.shift < 0) | 2572 | if (rdev->badblocks.shift < 0) |
2573 | return 0; | 2573 | return 0; |
2574 | 2574 | ||
2575 | block_sectors = 1 << rdev->badblocks.shift; | 2575 | block_sectors = roundup(1 << rdev->badblocks.shift, |
2576 | bdev_logical_block_size(rdev->bdev) >> 9); | ||
2576 | sector = r10_bio->sector; | 2577 | sector = r10_bio->sector; |
2577 | sectors = ((r10_bio->sector + block_sectors) | 2578 | sectors = ((r10_bio->sector + block_sectors) |
2578 | & ~(sector_t)(block_sectors - 1)) | 2579 | & ~(sector_t)(block_sectors - 1)) |
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index aa76865b804b..e75d48c0421a 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -3170,7 +3170,8 @@ static void handle_stripe_dirtying(struct r5conf *conf, | |||
3170 | * generate correct data from the parity. | 3170 | * generate correct data from the parity. |
3171 | */ | 3171 | */ |
3172 | if (conf->max_degraded == 2 || | 3172 | if (conf->max_degraded == 2 || |
3173 | (recovery_cp < MaxSector && sh->sector >= recovery_cp)) { | 3173 | (recovery_cp < MaxSector && sh->sector >= recovery_cp && |
3174 | s->failed == 0)) { | ||
3174 | /* Calculate the real rcw later - for now make it | 3175 | /* Calculate the real rcw later - for now make it |
3175 | * look like rcw is cheaper | 3176 | * look like rcw is cheaper |
3176 | */ | 3177 | */ |