summaryrefslogtreecommitdiff
path: root/mdadm.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-03-10 15:05:23 +1100
committerNeilBrown <neilb@suse.de>2011-03-10 15:05:23 +1100
commite2e53a2da5d9fe743fca0c995b5b720a058c5bab (patch)
tree2f6f1821fd931f39f2aac0aa9f62590f67593e81 /mdadm.c
parent9468aeac5704bd01d6fd334a0b1c018deb7bf238 (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.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/mdadm.c b/mdadm.c
index 443c88a7..c44c4322 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -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");