diff options
author | NeilBrown <neilb@suse.de> | 2011-05-10 12:09:02 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2011-05-10 12:09:02 +1000 |
commit | 907ea753259bd515cf24e88bbaab85a742d36bde (patch) | |
tree | fac889c171c3a220b03c39ec65d62af5b606c1e0 | |
parent | 85f102879f02b9e377d19c77670fa7652ebdbe7a (diff) | |
download | mdadm-907ea753259bd515cf24e88bbaab85a742d36bde.tar.gz |
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 <neilb@suse.de>
-rw-r--r-- | Grow.c | 28 |
1 files changed, 27 insertions, 1 deletions
@@ -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. |