Loading drivers/md/raid10.c +32 −25 Original line number Diff line number Diff line Loading @@ -1429,16 +1429,23 @@ static int raid10_remove_disk(struct mddev *mddev, struct md_rdev *rdev) struct r10conf *conf = mddev->private; int err = 0; int number = rdev->raid_disk; struct md_rdev **rdevp; struct mirror_info *p = conf->mirrors + number; print_conf(conf); if (rdev == p->rdev) { if (rdev == p->rdev) rdevp = &p->rdev; else if (rdev == p->replacement) rdevp = &p->replacement; else return 0; if (test_bit(In_sync, &rdev->flags) || atomic_read(&rdev->nr_pending)) { err = -EBUSY; goto abort; } /* Only remove faulty devices in recovery /* Only remove faulty devices if recovery * is not possible. */ if (!test_bit(Faulty, &rdev->flags) && Loading @@ -1447,16 +1454,16 @@ static int raid10_remove_disk(struct mddev *mddev, struct md_rdev *rdev) err = -EBUSY; goto abort; } p->rdev = NULL; *rdevp = NULL; synchronize_rcu(); if (atomic_read(&rdev->nr_pending)) { /* lost the race, try later */ err = -EBUSY; p->rdev = rdev; *rdevp = rdev; goto abort; } err = md_integrity_register(mddev); } abort: print_conf(conf); Loading Loading
drivers/md/raid10.c +32 −25 Original line number Diff line number Diff line Loading @@ -1429,16 +1429,23 @@ static int raid10_remove_disk(struct mddev *mddev, struct md_rdev *rdev) struct r10conf *conf = mddev->private; int err = 0; int number = rdev->raid_disk; struct md_rdev **rdevp; struct mirror_info *p = conf->mirrors + number; print_conf(conf); if (rdev == p->rdev) { if (rdev == p->rdev) rdevp = &p->rdev; else if (rdev == p->replacement) rdevp = &p->replacement; else return 0; if (test_bit(In_sync, &rdev->flags) || atomic_read(&rdev->nr_pending)) { err = -EBUSY; goto abort; } /* Only remove faulty devices in recovery /* Only remove faulty devices if recovery * is not possible. */ if (!test_bit(Faulty, &rdev->flags) && Loading @@ -1447,16 +1454,16 @@ static int raid10_remove_disk(struct mddev *mddev, struct md_rdev *rdev) err = -EBUSY; goto abort; } p->rdev = NULL; *rdevp = NULL; synchronize_rcu(); if (atomic_read(&rdev->nr_pending)) { /* lost the race, try later */ err = -EBUSY; p->rdev = rdev; *rdevp = rdev; goto abort; } err = md_integrity_register(mddev); } abort: print_conf(conf); Loading