aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid5.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/raid5.c')
-rw-r--r--drivers/md/raid5.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 2930fc26a852..1aebd3ef80b7 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -3703,6 +3703,8 @@ static int make_request(struct request_queue *q, struct bio * bi)
3703 return 0; 3703 return 0;
3704} 3704}
3705 3705
3706static sector_t raid5_size(mddev_t *mddev, sector_t sectors, int raid_disks);
3707
3706static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped) 3708static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped)
3707{ 3709{
3708 /* reshaping is quite different to recovery/resync so it is 3710 /* reshaping is quite different to recovery/resync so it is
@@ -3781,7 +3783,7 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped
3781 j == sh->qd_idx) 3783 j == sh->qd_idx)
3782 continue; 3784 continue;
3783 s = compute_blocknr(sh, j); 3785 s = compute_blocknr(sh, j);
3784 if (s < mddev->array_sectors) { 3786 if (s < raid5_size(mddev, 0, 0)) {
3785 skipped = 1; 3787 skipped = 1;
3786 continue; 3788 continue;
3787 } 3789 }
@@ -4700,6 +4702,9 @@ static int raid5_resize(mddev_t *mddev, sector_t sectors)
4700 sectors &= ~((sector_t)mddev->chunk_size/512 - 1); 4702 sectors &= ~((sector_t)mddev->chunk_size/512 - 1);
4701 md_set_array_sectors(mddev, raid5_size(mddev, sectors, 4703 md_set_array_sectors(mddev, raid5_size(mddev, sectors,
4702 mddev->raid_disks)); 4704 mddev->raid_disks));
4705 if (mddev->array_sectors >
4706 raid5_size(mddev, sectors, mddev->raid_disks))
4707 return -EINVAL;
4703 set_capacity(mddev->gendisk, mddev->array_sectors); 4708 set_capacity(mddev->gendisk, mddev->array_sectors);
4704 mddev->changed = 1; 4709 mddev->changed = 1;
4705 if (sectors > mddev->dev_sectors && mddev->recovery_cp == MaxSector) { 4710 if (sectors > mddev->dev_sectors && mddev->recovery_cp == MaxSector) {
@@ -4837,7 +4842,7 @@ static void end_reshape(raid5_conf_t *conf)
4837 if (!test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) { 4842 if (!test_bit(MD_RECOVERY_INTR, &conf->mddev->recovery)) {
4838 mddev_t *mddev = conf->mddev; 4843 mddev_t *mddev = conf->mddev;
4839 4844
4840 md_set_array_sectors(mddev, raid5_size(mddev, 0, 4845 md_set_array_sectors_lock(mddev, raid5_size(mddev, 0,
4841 conf->raid_disks)); 4846 conf->raid_disks));
4842 set_capacity(mddev->gendisk, mddev->array_sectors); 4847 set_capacity(mddev->gendisk, mddev->array_sectors);
4843 mddev->changed = 1; 4848 mddev->changed = 1;