diff options
author | Neil Brown <neilb@suse.de> | 2007-05-21 14:25:47 +1000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-05-21 14:25:47 +1000 |
commit | 5b28bd56725371d4a72988d4e72bb2fd852c6fa7 (patch) | |
tree | 9920caeae7cd911d759d4f71e8bc8600be0a10e4 | |
parent | 1f48664b8e65cafa65d121bb626649a6310cfaf2 (diff) | |
download | mdadm-5b28bd56725371d4a72988d4e72bb2fd852c6fa7.tar.gz mdadm-5b28bd56725371d4a72988d4e72bb2fd852c6fa7.tar.xz mdadm-5b28bd56725371d4a72988d4e72bb2fd852c6fa7.zip |
Improve error message for adding bitmap to a level that cannot support it.
Also give error on --build if no devices given.
-rw-r--r-- | Build.c | 6 | ||||
-rw-r--r-- | Create.c | 10 | ||||
-rw-r--r-- | Grow.c | 5 | ||||
-rw-r--r-- | mdadm.c | 10 |
4 files changed, 26 insertions, 5 deletions
@@ -146,6 +146,12 @@ int Build(char *mddev, int mdfd, int chunk, int level, int layout, fprintf(stderr, Name ": bitmaps not supported with this kernel\n"); return 1; } + + if (bitmap_file && level <= 0) { + fprintf(stderr, Name ": bitmaps not meaningful with level %s\n", + map_num(pers, level)?:"given"); + return 1; + } /* now add the devices */ for ((i=0), (dv = devlist) ; dv ; i++, dv=dv->next) { unsigned long long dsize; @@ -87,11 +87,6 @@ int Create(struct supertype *st, char *mddev, int mdfd, Name ": a RAID level is needed to create an array.\n"); return 1; } - if (raiddisks < 1) { - fprintf(stderr, - Name ": a number of --raid-devices must be given to create an array\n"); - return 1; - } if (raiddisks < 4 && level == 6) { fprintf(stderr, Name ": at least 4 raid-devices needed for level 6\n"); @@ -115,6 +110,11 @@ int Create(struct supertype *st, char *mddev, int mdfd, fprintf(stderr, Name ": You haven't given enough devices (real or missing) to create this array\n"); return 1; } + if (bitmap_file && level <= 0) { + fprintf(stderr, Name ": bitmaps not meaningful with level %s\n", + map_num(pers, level)?:"given"); + return 1; + } /* now set some defaults */ if (layout == UnSet) @@ -254,6 +254,11 @@ int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay, int devname); return 1; } + if (array.level <= 0) { + fprintf(stderr, Name ": Bitmaps not meaningful with level %s\n", + map_num(pers, array.level)?:"of this array"); + return 1; + } bitmapsize = array.size; bitmapsize <<= 1; if (get_dev_size(fd, NULL, &array_size) && @@ -1141,6 +1141,11 @@ int main(int argc, char *argv[]) rv = 1; break; } + if (raiddisks == 0) { + fprintf(stderr, Name ": no raid-disks specified.\n"); + rv = 1; + break; + } if (bitmap_file) { if (strcmp(bitmap_file, "internal")==0) { @@ -1160,6 +1165,11 @@ int main(int argc, char *argv[]) rv = 1; break; } + if (raiddisks == 0) { + fprintf(stderr, Name ": no raid-disks specified.\n"); + rv = 1; + break; + } rv = Create(ss, devlist->devname, mdfd, chunk, level, layout, size<0 ? 0 : size, raiddisks, sparedisks, ident.name, homehost, |