aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/md.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2006-03-27 04:18:13 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-27 11:45:02 -0500
commit63c70c4f3a30e77e6f445bd16eff7934a031ebd3 (patch)
tree12d2cd6cec5cd304bdf514ec8999a44c26f058ae /drivers/md/md.c
parentb578d55fdd80140f657130abd85aebeb345755fb (diff)
[PATCH] md: Split reshape handler in check_reshape and start_reshape
check_reshape checks validity and does things that can be done instantly - like adding devices to raid1. start_reshape initiates a restriping process to convert the whole array. Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index b9dfdfccdb78..1a637676a930 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2594,7 +2594,7 @@ static int do_md_run(mddev_t * mddev)
2594 strlcpy(mddev->clevel, pers->name, sizeof(mddev->clevel)); 2594 strlcpy(mddev->clevel, pers->name, sizeof(mddev->clevel));
2595 2595
2596 if (mddev->reshape_position != MaxSector && 2596 if (mddev->reshape_position != MaxSector &&
2597 pers->reshape == NULL) { 2597 pers->start_reshape == NULL) {
2598 /* This personality cannot handle reshaping... */ 2598 /* This personality cannot handle reshaping... */
2599 mddev->pers = NULL; 2599 mddev->pers = NULL;
2600 module_put(pers->owner); 2600 module_put(pers->owner);
@@ -3556,14 +3556,16 @@ static int update_raid_disks(mddev_t *mddev, int raid_disks)
3556{ 3556{
3557 int rv; 3557 int rv;
3558 /* change the number of raid disks */ 3558 /* change the number of raid disks */
3559 if (mddev->pers->reshape == NULL) 3559 if (mddev->pers->check_reshape == NULL)
3560 return -EINVAL; 3560 return -EINVAL;
3561 if (raid_disks <= 0 || 3561 if (raid_disks <= 0 ||
3562 raid_disks >= mddev->max_disks) 3562 raid_disks >= mddev->max_disks)
3563 return -EINVAL; 3563 return -EINVAL;
3564 if (mddev->sync_thread) 3564 if (mddev->sync_thread || mddev->reshape_position != MaxSector)
3565 return -EBUSY; 3565 return -EBUSY;
3566 rv = mddev->pers->reshape(mddev, raid_disks); 3566 mddev->delta_disks = raid_disks - mddev->raid_disks;
3567
3568 rv = mddev->pers->check_reshape(mddev);
3567 return rv; 3569 return rv;
3568} 3570}
3569 3571