diff options
author | NeilBrown <neilb@suse.de> | 2011-03-10 15:05:23 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2011-03-10 15:05:23 +1100 |
commit | e2e53a2da5d9fe743fca0c995b5b720a058c5bab (patch) | |
tree | 2f6f1821fd931f39f2aac0aa9f62590f67593e81 /mdadm.c | |
parent | 9468aeac5704bd01d6fd334a0b1c018deb7bf238 (diff) |
Grow: support reshape of RAID0 arrays.
This is done via conversion to RAID4 and back.
To grow the array, extra devices will be needed which cannot
already be present as spares - so allow a list of new devices
to be included in grow request which changed the number of devices.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'mdadm.c')
-rw-r--r-- | mdadm.c | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -1630,22 +1630,26 @@ int main(int argc, char *argv[]) break; } } - if (devs_found > 1) { - + if (devs_found > 1 && raiddisks == 0) { /* must be '-a'. */ - if (size >= 0 || raiddisks || chunk || layout_str != NULL || bitmap_file) { - fprintf(stderr, Name ": --add cannot be used with other geometry changes in --grow mode\n"); + if (size >= 0 || chunk || layout_str != NULL || bitmap_file) { + fprintf(stderr, Name ": --add cannot be used with " + "other geometry changes in --grow mode\n"); rv = 1; break; } for (dv=devlist->next; dv ; dv=dv->next) { - rv = Grow_Add_device(devlist->devname, mdfd, dv->devname); + rv = Grow_Add_device(devlist->devname, mdfd, + dv->devname); if (rv) break; } } else if (bitmap_file) { - if (size >= 0 || raiddisks || chunk || layout_str != NULL) { - fprintf(stderr, Name ": --bitmap changes cannot be used with other geometry changes in --grow mode\n"); + if (size >= 0 || raiddisks || chunk || + layout_str != NULL || devs_found) { + fprintf(stderr, Name ": --bitmap changes cannot be " + "used with other geometry changes " + "in --grow mode\n"); rv = 1; break; } @@ -1657,6 +1661,7 @@ int main(int argc, char *argv[]) || chunk != 0 || level != UnSet) { rv = Grow_reshape(devlist->devname, mdfd, quiet, backup_file, size, level, layout_str, chunk, raiddisks, + devlist->next, force); } else if (array_size < 0) fprintf(stderr, Name ": no changes to --grow\n"); |