0001-md-FIX-raid5-should-accept-slot-set-by-mdadm

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When reshape process is invoked in mdadm, new disks are added with set slot information.
raid5_start_reshape() should count devices with slot set as spares when slot is set outside array.
Those disks has to be added to array for reshape process also.

Changes allows to accept spares with slot set to raid5 configuration.

Signed-off-by: Adam Kwolek <adam.kwolek@xxxxxxxxx>
---
 drivers/md/raid5.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index dc574f3..fa2b085 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -5528,8 +5528,9 @@ static int raid5_start_reshape(mddev_t *mddev)
 		return -ENOSPC;
 
 	list_for_each_entry(rdev, &mddev->disks, same_set)
-		if (rdev->raid_disk < 0 &&
-		    !test_bit(Faulty, &rdev->flags))
+		if (((rdev->raid_disk < 0) ||
+		    ((mddev->raid_disks -1 -mddev->degraded) < rdev->raid_disk)) &&
+		      !test_bit(Faulty, &rdev->flags))
 			spares++;
 
 	if (spares - mddev->degraded < mddev->delta_disks - conf->max_degraded)
@@ -5574,8 +5575,9 @@ static int raid5_start_reshape(mddev_t *mddev)
 	 */
 	if (mddev->delta_disks >= 0)
 	    list_for_each_entry(rdev, &mddev->disks, same_set)
-		if (rdev->raid_disk < 0 &&
-		    !test_bit(Faulty, &rdev->flags)) {
+		if (((rdev->raid_disk < 0) ||
+		    ((mddev->raid_disks -1 -mddev->degraded) < rdev->raid_disk)) &&
+		      !test_bit(Faulty, &rdev->flags)) {
 			if (raid5_add_disk(mddev, rdev) == 0) {
 				char nm[20];
 				if (rdev->raid_disk >= conf->previous_raid_disks) {
-- 
1.6.0.2

--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux