From 0d5ac3c6efceaec95b47d734dcdaf4a5cd87bf57 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 22 Mar 2011 14:52:36 +1100 Subject: [PATCH] Grow: increase raid_disks before adding specific spares. When we add spared that have been targeted at a specific slot, we need raid_disks to be bigger than the slot number. But currently we don't increase raid_disks until after we add these spares. So introduce an early increase of raid_disks to allow the spares to be added. Signed-off-by: NeilBrown --- Grow.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Grow.c b/Grow.c index b639585..d6ecde2 100644 --- a/Grow.c +++ b/Grow.c @@ -1786,6 +1786,15 @@ static int reshape_array(char *container, int fd, char *devname, if (info2) { sysfs_init(info2, fd, st->devnum); + /* When increasing number of devices, we need to set + * new raid_disks before adding these, or they might + * be rejected. + */ + if (reshape.backup_blocks && + reshape.after.data_disks > reshape.before.data_disks) + subarray_set_num(container, info2, "raid_disks", + reshape.after.data_disks + + reshape.parity); for (d = info2->devs; d; d = d->next) { if (d->disk.state == 0 && d->disk.raid_disk >= 0) {