diff options
Diffstat (limited to 'drivers/md/raid1.c')
-rw-r--r-- | drivers/md/raid1.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 22cfc6660b18..8e717bd518e7 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -2752,9 +2752,16 @@ static int raid1_resize(struct mddev *mddev, sector_t sectors) | |||
2752 | * any io in the removed space completes, but it hardly seems | 2752 | * any io in the removed space completes, but it hardly seems |
2753 | * worth it. | 2753 | * worth it. |
2754 | */ | 2754 | */ |
2755 | md_set_array_sectors(mddev, raid1_size(mddev, sectors, 0)); | 2755 | sector_t newsize = raid1_size(mddev, sectors, 0); |
2756 | if (mddev->array_sectors > raid1_size(mddev, sectors, 0)) | 2756 | if (mddev->external_size && |
2757 | mddev->array_sectors > newsize) | ||
2757 | return -EINVAL; | 2758 | return -EINVAL; |
2759 | if (mddev->bitmap) { | ||
2760 | int ret = bitmap_resize(mddev->bitmap, newsize, 0, 0); | ||
2761 | if (ret) | ||
2762 | return ret; | ||
2763 | } | ||
2764 | md_set_array_sectors(mddev, newsize); | ||
2758 | set_capacity(mddev->gendisk, mddev->array_sectors); | 2765 | set_capacity(mddev->gendisk, mddev->array_sectors); |
2759 | revalidate_disk(mddev->gendisk); | 2766 | revalidate_disk(mddev->gendisk); |
2760 | if (sectors > mddev->dev_sectors && | 2767 | if (sectors > mddev->dev_sectors && |