Skip to content

Commit 987faed

Browse files
committed
md/raid1,raid10: don't ignore IO flags
JIRA: https://issues.redhat.com/browse/RHEL-83988 commit e879a0d Author: Yu Kuai <[email protected]> Date: Thu Feb 27 20:16:57 2025 +0800 md/raid1,raid10: don't ignore IO flags If blk-wbt is enabled by default, it's found that raid write performance is quite bad because all IO are throttled by wbt of underlying disks, due to flag REQ_IDLE is ignored. And turns out this behaviour exist since blk-wbt is introduced. Other than REQ_IDLE, other flags should not be ignored as well, for example REQ_META can be set for filesystems, clearing it can cause priority reverse problems; And REQ_NOWAIT should not be cleared as well, because io will wait instead of failing directly in underlying disks. Fix those problems by keep IO flags from master bio. Fises: f51d46d ("md: add support for REQ_NOWAIT") Fixes: e34cbd3 ("blk-wbt: add general throttling mechanism") Fixes: 5404bc7 ("[PATCH] Allow file systems to differentiate between data and meta reads") Link: https://lore.kernel.org/linux-raid/[email protected] Signed-off-by: Yu Kuai <[email protected]> Signed-off-by: Nigel Croxon <[email protected]>
1 parent 138203d commit 987faed

File tree

2 files changed

+0
-13
lines changed

2 files changed

+0
-13
lines changed

drivers/md/raid1.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1316,8 +1316,6 @@ static void raid1_read_request(struct mddev *mddev, struct bio *bio,
13161316
struct r1conf *conf = mddev->private;
13171317
struct raid1_info *mirror;
13181318
struct bio *read_bio;
1319-
const enum req_op op = bio_op(bio);
1320-
const blk_opf_t do_sync = bio->bi_opf & REQ_SYNC;
13211319
int max_sectors;
13221320
int rdisk, error;
13231321
bool r1bio_existed = !!r1_bio;
@@ -1405,7 +1403,6 @@ static void raid1_read_request(struct mddev *mddev, struct bio *bio,
14051403
read_bio->bi_iter.bi_sector = r1_bio->sector +
14061404
mirror->rdev->data_offset;
14071405
read_bio->bi_end_io = raid1_end_read_request;
1408-
read_bio->bi_opf = op | do_sync;
14091406
if (test_bit(FailFast, &mirror->rdev->flags) &&
14101407
test_bit(R1BIO_FailFast, &r1_bio->state))
14111408
read_bio->bi_opf |= MD_FAILFAST;
@@ -1654,8 +1651,6 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,
16541651

16551652
mbio->bi_iter.bi_sector = (r1_bio->sector + rdev->data_offset);
16561653
mbio->bi_end_io = raid1_end_write_request;
1657-
mbio->bi_opf = bio_op(bio) |
1658-
(bio->bi_opf & (REQ_SYNC | REQ_FUA | REQ_ATOMIC));
16591654
if (test_bit(FailFast, &rdev->flags) &&
16601655
!test_bit(WriteMostly, &rdev->flags) &&
16611656
conf->raid_disks - mddev->degraded > 1)

drivers/md/raid10.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,8 +1147,6 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio,
11471147
{
11481148
struct r10conf *conf = mddev->private;
11491149
struct bio *read_bio;
1150-
const enum req_op op = bio_op(bio);
1151-
const blk_opf_t do_sync = bio->bi_opf & REQ_SYNC;
11521150
int max_sectors;
11531151
struct md_rdev *rdev;
11541152
char b[BDEVNAME_SIZE];
@@ -1229,7 +1227,6 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio,
12291227
read_bio->bi_iter.bi_sector = r10_bio->devs[slot].addr +
12301228
choose_data_offset(r10_bio, rdev);
12311229
read_bio->bi_end_io = raid10_end_read_request;
1232-
read_bio->bi_opf = op | do_sync;
12331230
if (test_bit(FailFast, &rdev->flags) &&
12341231
test_bit(R10BIO_FailFast, &r10_bio->state))
12351232
read_bio->bi_opf |= MD_FAILFAST;
@@ -1248,10 +1245,6 @@ static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio,
12481245
struct bio *bio, bool replacement,
12491246
int n_copy)
12501247
{
1251-
const enum req_op op = bio_op(bio);
1252-
const blk_opf_t do_sync = bio->bi_opf & REQ_SYNC;
1253-
const blk_opf_t do_fua = bio->bi_opf & REQ_FUA;
1254-
const blk_opf_t do_atomic = bio->bi_opf & REQ_ATOMIC;
12551248
unsigned long flags;
12561249
struct r10conf *conf = mddev->private;
12571250
struct md_rdev *rdev;
@@ -1270,7 +1263,6 @@ static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio,
12701263
mbio->bi_iter.bi_sector = (r10_bio->devs[n_copy].addr +
12711264
choose_data_offset(r10_bio, rdev));
12721265
mbio->bi_end_io = raid10_end_write_request;
1273-
mbio->bi_opf = op | do_sync | do_fua | do_atomic;
12741266
if (!replacement && test_bit(FailFast,
12751267
&conf->mirrors[devnum].rdev->flags)
12761268
&& enough(conf, devnum))

0 commit comments

Comments
 (0)