diff options
author | Neil Brown <neilb@suse.de> | 2007-10-17 13:08:12 +1000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-10-17 13:08:12 +1000 |
commit | 570510ba32858ddedf20a055240ddbf39d3b76e1 (patch) | |
tree | d164c25e85c02fc603eece909e0b5b1b05d50cca /Create.c | |
parent | 5cda096425ff640c89f5b2f98611c6956c1a8e97 (diff) | |
download | mdadm-570510ba32858ddedf20a055240ddbf39d3b76e1.tar.gz mdadm-570510ba32858ddedf20a055240ddbf39d3b76e1.tar.xz mdadm-570510ba32858ddedf20a055240ddbf39d3b76e1.zip |
Add some extra consistency checks based on level.
Also use LEVEL_LINEAR, LEVEL_MULTIPATH in place of -1 or -4 in a few places.
Diffstat (limited to 'Create.c')
-rw-r--r-- | Create.c | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -111,6 +111,11 @@ int Create(struct supertype *st, char *mddev, int mdfd, Name ": at least 2 raid-devices needed for level 4 or 5\n"); return 1; } + if (level <= 0 && sparedisks) { + fprintf(stderr, + Name ": This level does not support spare devices\n"); + return 1; + } if (subdevs > raiddisks+sparedisks) { fprintf(stderr, Name ": You have listed more devices (%d) than are in the array(%d)!\n", subdevs, raiddisks+sparedisks); return 1; @@ -167,20 +172,24 @@ int Create(struct supertype *st, char *mddev, int mdfd, case 10: case 6: case 0: - case -1: /* linear */ + case LEVEL_LINEAR: /* linear */ if (chunk == 0) { chunk = 64; if (verbose > 0) fprintf(stderr, Name ": chunk size defaults to 64K\n"); } break; - default: /* raid1, multipath */ + case 1: + case LEVEL_MULTIPATH: if (chunk) { chunk = 0; if (verbose > 0) fprintf(stderr, Name ": chunk size ignored for this level\n"); } break; + default: + fprintf(stderr, Name ": unknown level %d\n", level); + return 1; } /* now look at the subdevs */ @@ -332,6 +341,12 @@ int Create(struct supertype *st, char *mddev, int mdfd, break; } } + + if (level <= 0 && first_missing != subdevs * 2) { + fprintf(stderr, + Name ": This level does not support missing devices\n"); + return 1; + } /* Ok, lets try some ioctls */ |