md/raid5: Properly remove excess drives after shrinking a raid5/6
authorNeilBrown <neilb@suse.de>
Thu, 13 Aug 2009 00:41:49 +0000 (10:41 +1000)
committerNeilBrown <neilb@suse.de>
Thu, 13 Aug 2009 00:41:49 +0000 (10:41 +1000)
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>
drivers/md/raid5.c

index 94a74cb..b8a2c5d 100644 (file)
@@ -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;