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: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
1a940fcee3
commit
ba1b41b6b4
|
@ -2479,6 +2479,10 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len)
|
|||
if (rdev2->raid_disk == slot)
|
||||
return -EEXIST;
|
||||
|
||||
if (slot >= rdev->mddev->raid_disks &&
|
||||
slot >= rdev->mddev->raid_disks + rdev->mddev->delta_disks)
|
||||
return -ENOSPC;
|
||||
|
||||
rdev->raid_disk = slot;
|
||||
if (test_bit(In_sync, &rdev->flags))
|
||||
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 */;
|
||||
/* don't wakeup anyone, leave that to userspace. */
|
||||
} else {
|
||||
if (slot >= rdev->mddev->raid_disks)
|
||||
if (slot >= rdev->mddev->raid_disks &&
|
||||
slot >= rdev->mddev->raid_disks + rdev->mddev->delta_disks)
|
||||
return -ENOSPC;
|
||||
rdev->raid_disk = slot;
|
||||
/* assume it is working */
|
||||
|
|
Loading…
Reference in New Issue