浏览代码

md/raid5: improve removal of extra devices after reshape.

After a reshape which reduced the number of devices we need
to disconnect the extra devices.
The code for this doesn't currently handle 'replacement' devices.
It is very unlikely that such devices will be present, but it is
safest to handle them anyway.

So simplify the handling.  Just clear In_sync and leave it
to remove_and_add_spaces (which will be called soon) to do
the real works.

Signed-off-by: NeilBrown <neilb@suse.de>
NeilBrown 13 年之前
父节点
当前提交
da7613b8b0
共有 1 个文件被更改,包括 5 次插入5 次删除
  1. 5 5
      drivers/md/raid5.c

+ 5 - 5
drivers/md/raid5.c

@@ -5755,11 +5755,11 @@ static void raid5_finish_reshape(struct mddev *mddev)
 			     d < conf->raid_disks - mddev->delta_disks;
 			     d < conf->raid_disks - mddev->delta_disks;
 			     d++) {
 			     d++) {
 				struct md_rdev *rdev = conf->disks[d].rdev;
 				struct md_rdev *rdev = conf->disks[d].rdev;
-				if (rdev &&
-				    raid5_remove_disk(mddev, rdev) == 0) {
-					sysfs_unlink_rdev(mddev, rdev);
-					rdev->raid_disk = -1;
-				}
+				if (rdev)
+					clear_bit(In_sync, &rdev->flags);
+				rdev = conf->disks[d].replacement;
+				if (rdev)
+					clear_bit(In_sync, &rdev->flags);
 			}
 			}
 		}
 		}
 		mddev->layout = conf->algorithm;
 		mddev->layout = conf->algorithm;