Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba1b41b6 authored by NeilBrown's avatar NeilBrown
Browse files

md: range check slot number when manually adding a spare.



When adding a spare to an active array, we should check the slot
number, but allow it to be larger than raid_disks if a reshape
is being prepared.

Apply the same test when adding a device to an
array-under-construction.  It already had most of the test in place,
but not quite all.

Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 1a940fce
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -2479,6 +2479,10 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len)
			if (rdev2->raid_disk == slot)
			if (rdev2->raid_disk == slot)
				return -EEXIST;
				return -EEXIST;


		if (slot >= rdev->mddev->raid_disks &&
		    slot >= rdev->mddev->raid_disks + rdev->mddev->delta_disks)
			return -ENOSPC;

		rdev->raid_disk = slot;
		rdev->raid_disk = slot;
		if (test_bit(In_sync, &rdev->flags))
		if (test_bit(In_sync, &rdev->flags))
			rdev->saved_raid_disk = slot;
			rdev->saved_raid_disk = slot;
@@ -2496,7 +2500,8 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len)
			/* failure here is OK */;
			/* failure here is OK */;
		/* don't wakeup anyone, leave that to userspace. */
		/* don't wakeup anyone, leave that to userspace. */
	} else {
	} else {
		if (slot >= rdev->mddev->raid_disks)
		if (slot >= rdev->mddev->raid_disks &&
		    slot >= rdev->mddev->raid_disks + rdev->mddev->delta_disks)
			return -ENOSPC;
			return -ENOSPC;
		rdev->raid_disk = slot;
		rdev->raid_disk = slot;
		/* assume it is working */
		/* assume it is working */