diff options
| -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 | */ |
