From: NeilBrown Date: Tue, 10 May 2011 02:09:02 +0000 (+1000) Subject: Grow: restore ability to configure 'faulty' arrays via mdadm. X-Git-Tag: mdadm-3.2.2~82 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=907ea753259bd515cf24e88bbaab85a742d36bde;p=thirdparty%2Fmdadm.git Grow: restore ability to configure 'faulty' arrays via mdadm. The big 'grow' refactor lost us the ability to configure 'faulty' arrays through --grow. So put that back as a special case. Signed-off-by: NeilBrown --- diff --git a/Grow.c b/Grow.c index 41dc9c91..0a084482 100644 --- a/Grow.c +++ b/Grow.c @@ -1617,7 +1617,33 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file, } } - if (array.level == LEVEL_CONTAINER) { + if (array.level == LEVEL_FAULTY) { + if (level != UnSet && level != array.level) { + fprintf(stderr, Name ": cannot change level of Faulty device\n"); + rv =1 ; + } + if (chunksize) { + fprintf(stderr, Name ": cannot set chunksize of Faulty device\n"); + rv =1 ; + } + if (raid_disks && raid_disks != 1) { + fprintf(stderr, Name ": cannot set raid_disks of Faulty device\n"); + rv =1 ; + } + if (layout_str) { + if (ioctl(fd, GET_ARRAY_INFO, &array) != 0) { + dprintf("Cannot get array information.\n"); + goto release; + } + array.layout = info.new_layout; + if (ioctl(fd, SET_ARRAY_INFO, &array) != 0) { + fprintf(stderr, Name ": failed to set new layout\n"); + rv = 1; + } else if (!quiet) + printf("layout for %s set to %d\n", + devname, array.layout); + } + } else if (array.level == LEVEL_CONTAINER) { /* This change is to be applied to every array in the * container. This is only needed when the metadata imposes * restraints of the various arrays in the container.