Commit 649bfec6 authored by Yu Kuai's avatar Yu Kuai Committed by Song Liu
Browse files

md/raid5: don't set Faulty rdev for blocked_rdev



Faulty rdev should never be accessed anymore, hence there is no point to
wait for bad block to be acknowledged in this case while handling write
request.

Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
Tested-by: default avatarMariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Link: https://lore.kernel.org/r/20241031033114.3845582-8-yukuai1@huaweicloud.com


Signed-off-by: default avatarSong Liu <song@kernel.org>
parent d419284c
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -4724,16 +4724,15 @@ static void analyse_stripe(struct stripe_head *sh, struct stripe_head_state *s)
		if (rdev) {
			is_bad = rdev_has_badblock(rdev, sh->sector,
						   RAID5_STRIPE_SECTORS(conf));
			if (s->blocked_rdev == NULL
			    && (test_bit(Blocked, &rdev->flags)
				|| is_bad < 0)) {
			if (s->blocked_rdev == NULL) {
				if (is_bad < 0)
					set_bit(BlockedBadBlocks,
						&rdev->flags);
					set_bit(BlockedBadBlocks, &rdev->flags);
				if (rdev_blocked(rdev)) {
					s->blocked_rdev = rdev;
					atomic_inc(&rdev->nr_pending);
				}
			}
		}
		clear_bit(R5_Insync, &dev->flags);
		if (!rdev)
			/* Not in-sync */;