From 8ece734dacc17106b4cfff29a03b0384879a254c Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Mon, 3 Aug 2009 10:59:55 +1000 Subject: [PATCH] --- yaml --- r: 156200 b: refs/heads/master c: 3a981b03f38dc3b8a69b77cbc679e66c1318a44a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/md/md.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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));