Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6030cb0 authored by NeilBrown's avatar NeilBrown
Browse files

md/raid5: clear R5_NeedReplace when no longer needed.



This flag is currently never cleared, which can in rare cases
trigger a warn-on if it is still set but the block isn't
InSync.

So clear it when it isn't need, which includes if the replacement
device has failed.

Signed-off-by: default avatarNeilBrown <neilb@suse.com>
parent 90382ed9
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -4066,8 +4066,10 @@ static void analyse_stripe(struct stripe_head *sh, struct stripe_head_state *s)
				 &first_bad, &bad_sectors))
				 &first_bad, &bad_sectors))
			set_bit(R5_ReadRepl, &dev->flags);
			set_bit(R5_ReadRepl, &dev->flags);
		else {
		else {
			if (rdev)
			if (rdev && !test_bit(Faulty, &rdev->flags))
				set_bit(R5_NeedReplace, &dev->flags);
				set_bit(R5_NeedReplace, &dev->flags);
			else
				clear_bit(R5_NeedReplace, &dev->flags);
			rdev = rcu_dereference(conf->disks[i].rdev);
			rdev = rcu_dereference(conf->disks[i].rdev);
			clear_bit(R5_ReadRepl, &dev->flags);
			clear_bit(R5_ReadRepl, &dev->flags);
		}
		}