]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Improve error messages when metadata handler does not support request.
authorNeilBrown <neilb@suse.de>
Tue, 17 Nov 2009 02:15:34 +0000 (13:15 +1100)
committerNeilBrown <neilb@suse.de>
Tue, 17 Nov 2009 02:15:34 +0000 (13:15 +1100)
->validate_geometry is called to validate overall parameters,
and to validate each individual device.
If it ever fails, it needs to report the reason, as common code
cannot possible know.

Signed-off-by: NeilBrown <neilb@suse.de>
Create.c
super-ddf.c
super-intel.c
super0.c
super1.c

index 1fb40434647445f7a63a429237906922932fa514..60e53f3642b0b4d54f1c740a8d8a27e5d924b6ae 100644 (file)
--- a/Create.c
+++ b/Create.c
@@ -195,7 +195,7 @@ int Create(struct supertype *st, char *mddev,
        if (st && st->ss->external && sparedisks) {
                fprintf(stderr,
                        Name ": This metadata type does not support "
-                       "spare disks are create time\n");
+                       "spare disks at create time\n");
                return 1;
        }
        if (subdevs > raiddisks+sparedisks) {
@@ -332,7 +332,7 @@ int Create(struct supertype *st, char *mddev,
                                                       raiddisks,
                                                       chunk, size*2, dname,
                                                       &freesize,
-                                                      verbose > 0)) {
+                                                      verbose >= 0)) {
 
                                fprintf(stderr,
                                        Name ": %s is not suitable for "
index 80df570f2d6c6bb83cccdc06c8240dfccd3b71a1..fe83642f779c13f0ad15c52f3a2329b62c0c5fca 100644 (file)
@@ -2555,8 +2555,12 @@ static int validate_geometry_ddf(struct supertype *st,
                for (i=0; ddf_level_num[i].num1 != MAXINT; i++)
                        if (ddf_level_num[i].num2 == level)
                                break;
-               if (ddf_level_num[i].num1 == MAXINT)
+               if (ddf_level_num[i].num1 == MAXINT) {
+                       if (verbose)
+                               fprintf(stderr, Name ": DDF does not support level %d arrays\n",
+                                       level);
                        return 0;
+               }
                /* Should check layout? etc */
 
                if (st->sb && freesize) {
@@ -2604,7 +2608,7 @@ static int validate_geometry_ddf(struct supertype *st,
                if (verbose)
                        fprintf(stderr,
                                Name ": ddf: Cannot create this array "
-                               "on device %s\n",
+                               "on device %s - a container is required.\n",
                                dev);
                return 0;
        }
@@ -2696,8 +2700,11 @@ static int validate_geometry_ddf_bvd(struct supertype *st,
        struct extent *e;
        int i;
        /* ddf/bvd supports lots of things, but not containers */
-       if (level == LEVEL_CONTAINER)
+       if (level == LEVEL_CONTAINER) {
+               if (verbose)
+                       fprintf(stderr, Name ": DDF cannot create a container within an container\n");
                return 0;
+       }
        /* We must have the container info already read in. */
        if (!ddf)
                return 0;
index 9a99d609b4a83079c1064222be483eb4791e2fe8..2e119f831fc5d260ccc253d399058142b428304d 100644 (file)
@@ -3704,8 +3704,11 @@ static int validate_geometry_imsm(struct supertype *st, int level, int layout,
                case 1:
                case 10:
                case 5:
-                       break;
+                       return 0;
                default:
+                       if (verbose)
+                               fprintf(stderr, Name
+                                       ": IMSM only supports levels 0,1,5,10\n");
                        return 1;
                }
 
index 955e832dbb977d432f4fbf90c619a2dbb171707d..15b3ca2f6ba5069f9146eb63a1fa5ffb58ee58b7 100644 (file)
--- a/super0.c
+++ b/super0.c
@@ -1079,12 +1079,22 @@ static int validate_geometry0(struct supertype *st, int level,
        unsigned long long ldsize;
        int fd;
 
-       if (level == LEVEL_CONTAINER)
+       if (level == LEVEL_CONTAINER) {
+               if (verbose)
+                       fprintf(stderr, Name ": 0.90 metadata does not support containers\n");
                return 0;
-       if (raiddisks > MD_SB_DISKS)
+       }
+       if (raiddisks > MD_SB_DISKS) {
+               if (verbose)
+                       fprintf(stderr, Name ": 0.90 metadata supports at most %d devices per array\n",
+                               MD_SB_DISKS);
                return 0;
-       if (size > (0x7fffffffULL<<9))
+       }
+       if (size > (0x7fffffffULL<<9)) {
+               if (verbose)
+                       fprintf(stderr, Name ": 0.90 metadata supports at most 2 terrabytes per device\n");
                return 0;
+       }
        if (!subdev)
                return 1;
 
index 8678e9f421b9f45eebaf60849729acf471ad7039..5a2df0e18ff8560a65490faafc2dbeefedb674ce 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -1609,8 +1609,11 @@ static int validate_geometry1(struct supertype *st, int level,
        unsigned long long ldsize;
        int fd;
 
-       if (level == LEVEL_CONTAINER)
+       if (level == LEVEL_CONTAINER) {
+               if (verbose)
+                       fprintf(stderr, Name ": 1.x metadata does not support containers\n");
                return 0;
+       }
        if (!subdev)
                return 1;