Skip to content

Commit ff31a7e

Browse files
YuKuai-huaweiliu-song-6
authored andcommitted
md/raid1: don't wait for Faulty rdev in wait_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: Yu Kuai <[email protected]> Tested-by: Mariusz Tkaczyk <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Song Liu <[email protected]>
1 parent 88ed59c commit ff31a7e

File tree

1 file changed

+4
-13
lines changed

1 file changed

+4
-13
lines changed

drivers/md/raid1.c

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,25 +1425,16 @@ static bool wait_blocked_rdev(struct mddev *mddev, struct bio *bio)
14251425
if (!rdev)
14261426
continue;
14271427

1428-
if (test_bit(Blocked, &rdev->flags)) {
1429-
if (bio->bi_opf & REQ_NOWAIT)
1430-
return false;
1431-
1432-
mddev_add_trace_msg(rdev->mddev, "raid1 wait rdev %d blocked",
1433-
rdev->raid_disk);
1434-
atomic_inc(&rdev->nr_pending);
1435-
md_wait_for_blocked_rdev(rdev, rdev->mddev);
1436-
goto retry;
1437-
}
1438-
14391428
/* don't write here until the bad block is acknowledged */
14401429
if (test_bit(WriteErrorSeen, &rdev->flags) &&
14411430
rdev_has_badblock(rdev, bio->bi_iter.bi_sector,
1442-
bio_sectors(bio)) < 0) {
1431+
bio_sectors(bio)) < 0)
1432+
set_bit(BlockedBadBlocks, &rdev->flags);
1433+
1434+
if (rdev_blocked(rdev)) {
14431435
if (bio->bi_opf & REQ_NOWAIT)
14441436
return false;
14451437

1446-
set_bit(BlockedBadBlocks, &rdev->flags);
14471438
mddev_add_trace_msg(rdev->mddev, "raid1 wait rdev %d blocked",
14481439
rdev->raid_disk);
14491440
atomic_inc(&rdev->nr_pending);

0 commit comments

Comments
 (0)