diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/md/md.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 5e3714fecee9..665851308818 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -2479,6 +2479,10 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len) | |||
2479 | if (rdev2->raid_disk == slot) | 2479 | if (rdev2->raid_disk == slot) |
2480 | return -EEXIST; | 2480 | return -EEXIST; |
2481 | 2481 | ||
2482 | if (slot >= rdev->mddev->raid_disks && | ||
2483 | slot >= rdev->mddev->raid_disks + rdev->mddev->delta_disks) | ||
2484 | return -ENOSPC; | ||
2485 | |||
2482 | rdev->raid_disk = slot; | 2486 | rdev->raid_disk = slot; |
2483 | if (test_bit(In_sync, &rdev->flags)) | 2487 | if (test_bit(In_sync, &rdev->flags)) |
2484 | rdev->saved_raid_disk = slot; | 2488 | rdev->saved_raid_disk = slot; |
@@ -2496,7 +2500,8 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len) | |||
2496 | /* failure here is OK */; | 2500 | /* failure here is OK */; |
2497 | /* don't wakeup anyone, leave that to userspace. */ | 2501 | /* don't wakeup anyone, leave that to userspace. */ |
2498 | } else { | 2502 | } else { |
2499 | if (slot >= rdev->mddev->raid_disks) | 2503 | if (slot >= rdev->mddev->raid_disks && |
2504 | slot >= rdev->mddev->raid_disks + rdev->mddev->delta_disks) | ||
2500 | return -ENOSPC; | 2505 | return -ENOSPC; |
2501 | rdev->raid_disk = slot; | 2506 | rdev->raid_disk = slot; |
2502 | /* assume it is working */ | 2507 | /* assume it is working */ |