]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
imsm: enforce num_disks constraints
authorDan Williams <dan.j.williams@intel.com>
Tue, 20 Jan 2009 08:36:50 +0000 (01:36 -0700)
committerDan Williams <dan.j.williams@intel.com>
Tue, 20 Jan 2009 08:36:50 +0000 (01:36 -0700)
RAID1 == 2 disks
RAID5 >= 3 disks
RAID10 == 4 disks

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
super-intel.c

index 3063c7e215beefba5646b0e638fb51965725983d..f537fd2d2599d135a0ff004c71708731874c5773 100644 (file)
@@ -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)) {