summaryrefslogtreecommitdiffstats
path: root/drivers/md/raid5.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-08-13 02:41:49 +0200
committerNeilBrown <neilb@suse.de>2009-08-13 02:41:49 +0200
commit1a67dde0abba36421a1257d01ba9de2f6d1c160a (patch)
treec182c31207c46824097be7ce6b8813f05db4eb65 /drivers/md/raid5.c
parentmd/raid5: make sure a reshape restarts at the correct address. (diff)
downloadlinux-1a67dde0abba36421a1257d01ba9de2f6d1c160a.tar.xz
linux-1a67dde0abba36421a1257d01ba9de2f6d1c160a.zip
md/raid5: Properly remove excess drives after shrinking a raid5/6
We were removing the drives, from the array, but not removing symlinks from /sys/.... and not marking the device as having been removed. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to '')
-rw-r--r--drivers/md/raid5.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 94a74cb5cccb..b8a2c5dc67ba 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -5097,8 +5097,15 @@ static void raid5_finish_reshape(mddev_t *mddev)
mddev->degraded--;
for (d = conf->raid_disks ;
d < conf->raid_disks - mddev->delta_disks;
- d++)
- raid5_remove_disk(mddev, d);
+ d++) {
+ mdk_rdev_t *rdev = conf->disks[d].rdev;
+ if (rdev && raid5_remove_disk(mddev, d) == 0) {
+ char nm[20];
+ sprintf(nm, "rd%d", rdev->raid_disk);
+ sysfs_remove_link(&mddev->kobj, nm);
+ rdev->raid_disk = -1;
+ }
+ }
}
mddev->layout = conf->algorithm;
mddev->chunk_sectors = conf->chunk_sectors;