aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid10.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2012-05-21 23:55:27 -0400
committerNeilBrown <neilb@suse.de>2012-05-21 23:55:27 -0400
commita4a6125a074e1b08ee8ae34f700c5bca19eb9d18 (patch)
tree761a719a7d4f1a53d44349f7bef095368a9ae75a /drivers/md/raid10.c
parentb81a040481233e5171cb3fbc62f44636d5ea18b2 (diff)
md: allow array to be resized while bitmap is present.
Now that bitmaps can be resized, we can allow an array to be resized while the bitmap is present. This only covers resizing that involves changing the effective size of member devices, not resizing that changes the number of devices. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/raid10.c')
-rw-r--r--drivers/md/raid10.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index fb9062b5022c..8fe3aa469987 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -3678,9 +3678,15 @@ static int raid10_resize(struct mddev *mddev, sector_t sectors)
3678 3678
3679 oldsize = raid10_size(mddev, 0, 0); 3679 oldsize = raid10_size(mddev, 0, 0);
3680 size = raid10_size(mddev, sectors, 0); 3680 size = raid10_size(mddev, sectors, 0);
3681 md_set_array_sectors(mddev, size); 3681 if (mddev->external_size &&
3682 if (mddev->array_sectors > size) 3682 mddev->array_sectors > size)
3683 return -EINVAL; 3683 return -EINVAL;
3684 if (mddev->bitmap) {
3685 int ret = bitmap_resize(mddev->bitmap, size, 0, 0);
3686 if (ret)
3687 return ret;
3688 }
3689 md_set_array_sectors(mddev, size);
3684 set_capacity(mddev->gendisk, mddev->array_sectors); 3690 set_capacity(mddev->gendisk, mddev->array_sectors);
3685 revalidate_disk(mddev->gendisk); 3691 revalidate_disk(mddev->gendisk);
3686 if (sectors > mddev->dev_sectors && 3692 if (sectors > mddev->dev_sectors &&