aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid5.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-12-22 18:17:51 -0500
committerNeilBrown <neilb@suse.de>2011-12-22 18:17:51 -0500
commitb8321b68d1445f308324517e45fb0a5c2b48e271 (patch)
tree3fc4c9b253435753d2154d9bd697a7869163c29a /drivers/md/raid5.c
parent476a7abb9b00adfe6bf70e82800367319ab8078b (diff)
md: change hot_remove_disk to take an rdev rather than a number.
Soon an array will be able to have multiple devices with the same raid_disk number (an original and a replacement). So removing a device based on the number won't work. So pass the actual device handle instead. Reviewed-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/raid5.c')
-rw-r--r--drivers/md/raid5.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index a68c49250ed5..6b9fc58e8f2d 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -5038,16 +5038,15 @@ static int raid5_spare_active(struct mddev *mddev)
5038 return count; 5038 return count;
5039} 5039}
5040 5040
5041static int raid5_remove_disk(struct mddev *mddev, int number) 5041static int raid5_remove_disk(struct mddev *mddev, struct md_rdev *rdev)
5042{ 5042{
5043 struct r5conf *conf = mddev->private; 5043 struct r5conf *conf = mddev->private;
5044 int err = 0; 5044 int err = 0;
5045 struct md_rdev *rdev; 5045 int number = rdev->raid_disk;
5046 struct disk_info *p = conf->disks + number; 5046 struct disk_info *p = conf->disks + number;
5047 5047
5048 print_raid5_conf(conf); 5048 print_raid5_conf(conf);
5049 rdev = p->rdev; 5049 if (rdev == p->rdev) {
5050 if (rdev) {
5051 if (number >= conf->raid_disks && 5050 if (number >= conf->raid_disks &&
5052 conf->reshape_progress == MaxSector) 5051 conf->reshape_progress == MaxSector)
5053 clear_bit(In_sync, &rdev->flags); 5052 clear_bit(In_sync, &rdev->flags);
@@ -5369,7 +5368,8 @@ static void raid5_finish_reshape(struct mddev *mddev)
5369 d < conf->raid_disks - mddev->delta_disks; 5368 d < conf->raid_disks - mddev->delta_disks;
5370 d++) { 5369 d++) {
5371 struct md_rdev *rdev = conf->disks[d].rdev; 5370 struct md_rdev *rdev = conf->disks[d].rdev;
5372 if (rdev && raid5_remove_disk(mddev, d) == 0) { 5371 if (rdev &&
5372 raid5_remove_disk(mddev, rdev) == 0) {
5373 sysfs_unlink_rdev(mddev, rdev); 5373 sysfs_unlink_rdev(mddev, rdev);
5374 rdev->raid_disk = -1; 5374 rdev->raid_disk = -1;
5375 } 5375 }