summaryrefslogtreecommitdiff
path: root/Create.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2010-12-01 14:51:27 +1100
committerNeilBrown <neilb@suse.de>2010-12-01 14:51:27 +1100
commitacab7bb189f7f1e2ce1b8bbbc00e20358ce3149c (patch)
treeb03769a8f862818b46582ebcc32064c9d53118aa /Create.c
parentc82afc17a8fb132a4d0c843554a3b6135ac183b6 (diff)
Create/grow: improve checks on number of devices.
Check on upper limit of number of devices was in the wrong place. Result was could not create array with more than 27 devices without explicitly setting metadata, even though default metadata allows more. Fixed, and also perform check when growing an array. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'Create.c')
-rw-r--r--Create.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/Create.c b/Create.c
index c1364731..7c6979ac 100644
--- a/Create.c
+++ b/Create.c
@@ -66,11 +66,13 @@ static int default_layout(struct supertype *st, int level, int verbose)
int Create(struct supertype *st, char *mddev,
- int chunk, int level, int layout, unsigned long long size, int raiddisks, int sparedisks,
+ int chunk, int level, int layout, unsigned long long size,
+ int raiddisks, int sparedisks,
char *name, char *homehost, int *uuid,
int subdevs, struct mddev_dev *devlist,
int runstop, int verbose, int force, int assume_clean,
- char *bitmap_file, int bitmap_chunk, int write_behind, int delay, int autof)
+ char *bitmap_file, int bitmap_chunk, int write_behind,
+ int delay, int autof)
{
/*
* Create a new raid array.
@@ -395,6 +397,12 @@ int Create(struct supertype *st, char *mddev,
close(fd);
}
}
+ if (raiddisks + sparedisks > st->max_devs) {
+ fprintf(stderr, Name ": Too many devices:"
+ " %s metadata only supports %d\n",
+ st->ss->name, st->max_devs);
+ return 1;
+ }
if (have_container)
info.array.working_disks = raiddisks;
if (fail) {