From: Dan Williams Date: Tue, 20 Jan 2009 08:36:50 +0000 (-0700) Subject: imsm: enforce num_disks constraints X-Git-Tag: mdadm-3.0-devel3~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1c556e92bad85ab7591ddf5ac78b90513f315b32;p=thirdparty%2Fmdadm.git imsm: enforce num_disks constraints RAID1 == 2 disks RAID5 >= 3 disks RAID10 == 4 disks Signed-off-by: Dan Williams --- diff --git a/super-intel.c b/super-intel.c index 3063c7e2..f537fd2d 100644 --- a/super-intel.c +++ b/super-intel.c @@ -2771,10 +2771,9 @@ static int is_raid_level_supported(const struct imsm_orom *orom, int level, int case 1: if (raiddisks > 2) return imsm_orom_has_raid1e(orom); - else - return imsm_orom_has_raid1(orom); - case 10: return imsm_orom_has_raid10(orom); - case 5: return imsm_orom_has_raid5(orom); + return imsm_orom_has_raid1(orom) && raiddisks == 2; + case 10: return imsm_orom_has_raid10(orom) && raiddisks == 4; + case 5: return imsm_orom_has_raid5(orom) && raiddisks > 2; } else return 1; /* not on an Intel RAID platform so anything goes */ @@ -2805,7 +2804,8 @@ static int validate_geometry_imsm_volume(struct supertype *st, int level, return 0; if (!is_raid_level_supported(super->orom, level, raiddisks)) { - pr_vrb(": platform does not support raid level: %d\n", level); + pr_vrb(": platform does not support raid%d with %d disk%s\n", + level, raiddisks, raiddisks > 1 ? "s" : ""); return 0; } if (super->orom && !imsm_orom_has_chunk(super->orom, chunk)) {