diff --git a/[refs] b/[refs] index 6e5c41a20ec0..b1282d44de9a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ac5e7113e74872928844d00085bd47c988f12728 +refs/heads/master: 3a981b03f38dc3b8a69b77cbc679e66c1318a44a diff --git a/trunk/drivers/md/md.c b/trunk/drivers/md/md.c index 180949e94a7b..c194955aecae 100644 --- a/trunk/drivers/md/md.c +++ b/trunk/drivers/md/md.c @@ -2695,6 +2695,7 @@ level_store(mddev_t *mddev, const char *buf, size_t len) ssize_t rv = len; struct mdk_personality *pers; void *priv; + mdk_rdev_t *rdev; if (mddev->pers == NULL) { if (len == 0) @@ -2774,6 +2775,12 @@ level_store(mddev_t *mddev, const char *buf, size_t len) mddev_suspend(mddev); mddev->pers->stop(mddev); module_put(mddev->pers->owner); + /* Invalidate devices that are now superfluous */ + list_for_each_entry(rdev, &mddev->disks, same_set) + if (rdev->raid_disk >= mddev->raid_disks) { + rdev->raid_disk = -1; + clear_bit(In_sync, &rdev->flags); + } mddev->pers = pers; mddev->private = priv; strlcpy(mddev->clevel, pers->name, sizeof(mddev->clevel));