diff options
author | NeilBrown <neilb@suse.de> | 2006-03-27 01:18:13 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-27 08:45:02 -0800 |
commit | 63c70c4f3a30e77e6f445bd16eff7934a031ebd3 (patch) | |
tree | 12d2cd6cec5cd304bdf514ec8999a44c26f058ae /drivers/md/md.c | |
parent | b578d55fdd80140f657130abd85aebeb345755fb (diff) | |
download | op-kernel-dev-63c70c4f3a30e77e6f445bd16eff7934a031ebd3.zip op-kernel-dev-63c70c4f3a30e77e6f445bd16eff7934a031ebd3.tar.gz |
[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.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index b9dfdfc..1a63767 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -2594,7 +2594,7 @@ static int do_md_run(mddev_t * mddev) strlcpy(mddev->clevel, pers->name, sizeof(mddev->clevel)); if (mddev->reshape_position != MaxSector && - pers->reshape == NULL) { + pers->start_reshape == NULL) { /* This personality cannot handle reshaping... */ mddev->pers = NULL; module_put(pers->owner); @@ -3556,14 +3556,16 @@ static int update_raid_disks(mddev_t *mddev, int raid_disks) { int rv; /* change the number of raid disks */ - if (mddev->pers->reshape == NULL) + if (mddev->pers->check_reshape == NULL) return -EINVAL; if (raid_disks <= 0 || raid_disks >= mddev->max_disks) return -EINVAL; - if (mddev->sync_thread) + if (mddev->sync_thread || mddev->reshape_position != MaxSector) return -EBUSY; - rv = mddev->pers->reshape(mddev, raid_disks); + mddev->delta_disks = raid_disks - mddev->raid_disks; + + rv = mddev->pers->check_reshape(mddev); return rv; } |