diff options
author | Jonathan E Brassow <jbrassow@redhat.com> | 2012-07-27 10:08:04 -0400 |
---|---|---|
committer | Alasdair G Kergon <agk@redhat.com> | 2012-07-27 10:08:04 -0400 |
commit | f999e8fe70bd0b8faa27ccdac14b5942999c6e78 (patch) | |
tree | 13963a8a5187719e11d5bd6271b6259e4d4b4d0a | |
parent | a58a935d5a1b2ad267017a68c3a1bca26226cc76 (diff) |
dm raid: restructure parse_raid_params
In preparation for RAID10 addition to dm-raid, we change an 'if' conditional
to a 'switch' conditional to make it easier to see what is being checked for
each RAID type.
Signed-off-by: Jonathan Brassow <jbrassow@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
-rw-r--r-- | drivers/md/dm-raid.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c index 858a8b70811c..1717ed33dd7f 100644 --- a/drivers/md/dm-raid.c +++ b/drivers/md/dm-raid.c | |||
@@ -430,13 +430,28 @@ static int parse_raid_params(struct raid_set *rs, char **argv, | |||
430 | 430 | ||
431 | if (!strcasecmp(key, "rebuild")) { | 431 | if (!strcasecmp(key, "rebuild")) { |
432 | rebuild_cnt++; | 432 | rebuild_cnt++; |
433 | if (((rs->raid_type->level != 1) && | 433 | |
434 | (rebuild_cnt > rs->raid_type->parity_devs)) || | 434 | switch (rs->raid_type->level) { |
435 | ((rs->raid_type->level == 1) && | 435 | case 1: |
436 | (rebuild_cnt > (rs->md.raid_disks - 1)))) { | 436 | if (rebuild_cnt >= rs->md.raid_disks) { |
437 | rs->ti->error = "Too many rebuild devices specified for given RAID type"; | 437 | rs->ti->error = "Too many rebuild devices specified"; |
438 | return -EINVAL; | ||
439 | } | ||
440 | break; | ||
441 | case 4: | ||
442 | case 5: | ||
443 | case 6: | ||
444 | if (rebuild_cnt > rs->raid_type->parity_devs) { | ||
445 | rs->ti->error = "Too many rebuild devices specified for given RAID type"; | ||
446 | return -EINVAL; | ||
447 | } | ||
448 | break; | ||
449 | default: | ||
450 | DMERR("The rebuild parameter is not supported for %s", rs->raid_type->name); | ||
451 | rs->ti->error = "Rebuild not supported for this RAID type"; | ||
438 | return -EINVAL; | 452 | return -EINVAL; |
439 | } | 453 | } |
454 | |||
440 | if (value > rs->md.raid_disks) { | 455 | if (value > rs->md.raid_disks) { |
441 | rs->ti->error = "Invalid rebuild index given"; | 456 | rs->ti->error = "Invalid rebuild index given"; |
442 | return -EINVAL; | 457 | return -EINVAL; |