diff options
-rw-r--r-- | drivers/md/md.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 07f207e53ba9..802c2a379d8f 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -5883,6 +5883,9 @@ static int hot_remove_disk(struct mddev * mddev, dev_t dev) | |||
5883 | if (!rdev) | 5883 | if (!rdev) |
5884 | return -ENXIO; | 5884 | return -ENXIO; |
5885 | 5885 | ||
5886 | clear_bit(Blocked, &rdev->flags); | ||
5887 | remove_and_add_spares(mddev, rdev); | ||
5888 | |||
5886 | if (rdev->raid_disk >= 0) | 5889 | if (rdev->raid_disk >= 0) |
5887 | goto busy; | 5890 | goto busy; |
5888 | 5891 | ||
@@ -6496,6 +6499,10 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode, | |||
6496 | err = md_set_readonly(mddev, bdev); | 6499 | err = md_set_readonly(mddev, bdev); |
6497 | goto done_unlock; | 6500 | goto done_unlock; |
6498 | 6501 | ||
6502 | case HOT_REMOVE_DISK: | ||
6503 | err = hot_remove_disk(mddev, new_decode_dev(arg)); | ||
6504 | goto done_unlock; | ||
6505 | |||
6499 | case BLKROSET: | 6506 | case BLKROSET: |
6500 | if (get_user(ro, (int __user *)(arg))) { | 6507 | if (get_user(ro, (int __user *)(arg))) { |
6501 | err = -EFAULT; | 6508 | err = -EFAULT; |
@@ -6566,10 +6573,6 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode, | |||
6566 | goto done_unlock; | 6573 | goto done_unlock; |
6567 | } | 6574 | } |
6568 | 6575 | ||
6569 | case HOT_REMOVE_DISK: | ||
6570 | err = hot_remove_disk(mddev, new_decode_dev(arg)); | ||
6571 | goto done_unlock; | ||
6572 | |||
6573 | case HOT_ADD_DISK: | 6576 | case HOT_ADD_DISK: |
6574 | err = hot_add_disk(mddev, new_decode_dev(arg)); | 6577 | err = hot_add_disk(mddev, new_decode_dev(arg)); |
6575 | goto done_unlock; | 6578 | goto done_unlock; |