Commit 5fa31c49 authored by Zheng Qixing's avatar Zheng Qixing Committed by Yu Kuai
Browse files

md/raid1,raid10: strip REQ_NOWAIT from member bios



RAID layers don't implement proper non-blocking semantics for
REQ_NOWAIT, making the flag potentially misleading when propagated
to member disks.

This patch clear REQ_NOWAIT from cloned bios in raid1/raid10. Retain
original bio's REQ_NOWAIT flag for upper layer error handling.

Maybe we can implement non-blocking I/O handling mechanisms within
RAID in future work.

Fixes: 9f346f7d ("md/raid1,raid10: don't handle IO error for
REQ_RAHEAD and REQ_NOWAIT")
Signed-off-by: default avatarZheng Qixing <zhengqixing@huawei.com>
Link: https://lore.kernel.org/linux-raid/20250702102341.1969154-1-zhengqixing@huaweicloud.com


Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
parent 43806c3d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1399,7 +1399,7 @@ static void raid1_read_request(struct mddev *mddev, struct bio *bio,
	}
	read_bio = bio_alloc_clone(mirror->rdev->bdev, bio, gfp,
				   &mddev->bio_set);

	read_bio->bi_opf &= ~REQ_NOWAIT;
	r1_bio->bios[rdisk] = read_bio;

	read_bio->bi_iter.bi_sector = r1_bio->sector +
@@ -1649,6 +1649,7 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,
				wait_for_serialization(rdev, r1_bio);
		}

		mbio->bi_opf &= ~REQ_NOWAIT;
		r1_bio->bios[i] = mbio;

		mbio->bi_iter.bi_sector	= (r1_bio->sector + rdev->data_offset);
+2 −0
Original line number Diff line number Diff line
@@ -1224,6 +1224,7 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio,
		r10_bio->master_bio = bio;
	}
	read_bio = bio_alloc_clone(rdev->bdev, bio, gfp, &mddev->bio_set);
	read_bio->bi_opf &= ~REQ_NOWAIT;

	r10_bio->devs[slot].bio = read_bio;
	r10_bio->devs[slot].rdev = rdev;
@@ -1259,6 +1260,7 @@ static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio,
			     conf->mirrors[devnum].rdev;

	mbio = bio_alloc_clone(rdev->bdev, bio, GFP_NOIO, &mddev->bio_set);
	mbio->bi_opf &= ~REQ_NOWAIT;
	if (replacement)
		r10_bio->devs[n_copy].repl_bio = mbio;
	else