]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
imsm: define RAID_10 attribute
authorMateusz Kusiak <mateusz.kusiak@intel.com>
Mon, 29 Apr 2024 13:07:18 +0000 (15:07 +0200)
committerMariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Mon, 6 May 2024 23:50:09 +0000 (01:50 +0200)
Add MPB_ATTRIB_RAID10_EXT attribute to support RAID 10
with more than 4 drives.

Allow more than 4 drives in imsm_orom_support_raid_disks_raid10().

This is one of last patches for introducing R10D4+ to imsm.
Only small adjustments in reshape behaviours are needed.

Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
platform-intel.c
super-intel.c

index 40e8fb82da308efe7271dfeeae54d9da9ab9f74a..15a9fa5ac160f9b5573a91edfce7878690c5ed1f 100644 (file)
@@ -76,7 +76,8 @@ static bool imsm_orom_support_raid_disks_count_raid5(const int raid_disks)
 
 static bool imsm_orom_support_raid_disks_count_raid10(const int raid_disks)
 {
-       if (raid_disks == 4)
+       /* raid_disks count must be higher than 4 and even */
+       if (raid_disks >= 4 && (raid_disks & 1) == 0)
                return true;
        return false;
 }
index 4b168add4346a36a3855793a9d203b64f15376cd..2d30931672cd20566a16695b2fd18aef081eedad 100644 (file)
@@ -62,6 +62,8 @@
 #define MPB_ATTRIB_RAIDCNG             __cpu_to_le32(0x00000020)
 /* supports expanded stripe sizes of  256K, 512K and 1MB */
 #define MPB_ATTRIB_EXP_STRIPE_SIZE     __cpu_to_le32(0x00000040)
+/* supports RAID10 with more than 4 drives */
+#define MPB_ATTRIB_RAID10_EXT          __cpu_to_le32(0x00000080)
 
 /* The OROM Support RST Caching of Volumes */
 #define MPB_ATTRIB_NVM                 __cpu_to_le32(0x02000000)
@@ -89,6 +91,7 @@
                                        MPB_ATTRIB_RAID10          | \
                                        MPB_ATTRIB_RAID5           | \
                                        MPB_ATTRIB_EXP_STRIPE_SIZE | \
+                                       MPB_ATTRIB_RAID10_EXT      | \
                                        MPB_ATTRIB_BBM)
 
 /* Define attributes that are unused but not harmful */
@@ -5552,6 +5555,8 @@ static void imsm_update_version_info(struct intel_super *super)
                        break;
                case IMSM_T_RAID10:
                        mpb->attributes |= MPB_ATTRIB_RAID10;
+                       if (map->num_members > 4)
+                               mpb->attributes |= MPB_ATTRIB_RAID10_EXT;
                        break;
                }
        }