Improve error messages when metadata handler does not support request.
->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>
This commit is contained in:
parent
b8ab2a50ab
commit
b42f577a0d
4
Create.c
4
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 "
|
||||
|
|
13
super-ddf.c
13
super-ddf.c
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
16
super0.c
16
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;
|
||||
|
||||
|
|
5
super1.c
5
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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue