Skip to content

Commit 22f1662

Browse files
YuKuai-huaweiaxboe
authored andcommitted
md: fix mssing blktrace bio split events
If bio is split by internal handling like chunksize or badblocks, the corresponding trace_block_split() is missing, resulting in blktrace inability to catch BIO split events and making it harder to analyze the BIO sequence. Cc: [email protected] Fixes: 4b1faf9 ("block: Kill bio_pair_split()") Signed-off-by: Yu Kuai <[email protected]> Reviewed-by: Damien Le Moal <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent ea3d1f1 commit 22f1662

File tree

5 files changed

+19
-0
lines changed

5 files changed

+19
-0
lines changed

drivers/md/md-linear.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ static bool linear_make_request(struct mddev *mddev, struct bio *bio)
266266
}
267267

268268
bio_chain(split, bio);
269+
trace_block_split(split, bio->bi_iter.bi_sector);
269270
submit_bio_noacct(bio);
270271
bio = split;
271272
}

drivers/md/raid0.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,9 @@ static void raid0_handle_discard(struct mddev *mddev, struct bio *bio)
472472
bio_endio(bio);
473473
return;
474474
}
475+
475476
bio_chain(split, bio);
477+
trace_block_split(split, bio->bi_iter.bi_sector);
476478
submit_bio_noacct(bio);
477479
bio = split;
478480
end = zone->zone_end;
@@ -620,7 +622,9 @@ static bool raid0_make_request(struct mddev *mddev, struct bio *bio)
620622
bio_endio(bio);
621623
return true;
622624
}
625+
623626
bio_chain(split, bio);
627+
trace_block_split(split, bio->bi_iter.bi_sector);
624628
raid0_map_submit_bio(mddev, bio);
625629
bio = split;
626630
}

drivers/md/raid1.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,7 +1384,9 @@ static void raid1_read_request(struct mddev *mddev, struct bio *bio,
13841384
error = PTR_ERR(split);
13851385
goto err_handle;
13861386
}
1387+
13871388
bio_chain(split, bio);
1389+
trace_block_split(split, bio->bi_iter.bi_sector);
13881390
submit_bio_noacct(bio);
13891391
bio = split;
13901392
r1_bio->master_bio = bio;
@@ -1616,7 +1618,9 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,
16161618
error = PTR_ERR(split);
16171619
goto err_handle;
16181620
}
1621+
16191622
bio_chain(split, bio);
1623+
trace_block_split(split, bio->bi_iter.bi_sector);
16201624
submit_bio_noacct(bio);
16211625
bio = split;
16221626
r1_bio->master_bio = bio;

drivers/md/raid10.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,7 +1209,9 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio,
12091209
error = PTR_ERR(split);
12101210
goto err_handle;
12111211
}
1212+
12121213
bio_chain(split, bio);
1214+
trace_block_split(split, bio->bi_iter.bi_sector);
12131215
allow_barrier(conf);
12141216
submit_bio_noacct(bio);
12151217
wait_barrier(conf, false);
@@ -1495,7 +1497,9 @@ static void raid10_write_request(struct mddev *mddev, struct bio *bio,
14951497
error = PTR_ERR(split);
14961498
goto err_handle;
14971499
}
1500+
14981501
bio_chain(split, bio);
1502+
trace_block_split(split, bio->bi_iter.bi_sector);
14991503
allow_barrier(conf);
15001504
submit_bio_noacct(bio);
15011505
wait_barrier(conf, false);
@@ -1679,7 +1683,9 @@ static int raid10_handle_discard(struct mddev *mddev, struct bio *bio)
16791683
bio_endio(bio);
16801684
return 0;
16811685
}
1686+
16821687
bio_chain(split, bio);
1688+
trace_block_split(split, bio->bi_iter.bi_sector);
16831689
allow_barrier(conf);
16841690
/* Resend the fist split part */
16851691
submit_bio_noacct(split);
@@ -1694,7 +1700,9 @@ static int raid10_handle_discard(struct mddev *mddev, struct bio *bio)
16941700
bio_endio(bio);
16951701
return 0;
16961702
}
1703+
16971704
bio_chain(split, bio);
1705+
trace_block_split(split, bio->bi_iter.bi_sector);
16981706
allow_barrier(conf);
16991707
/* Resend the second split part */
17001708
submit_bio_noacct(bio);

drivers/md/raid5.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5493,8 +5493,10 @@ static struct bio *chunk_aligned_read(struct mddev *mddev, struct bio *raid_bio)
54935493

54945494
if (sectors < bio_sectors(raid_bio)) {
54955495
struct r5conf *conf = mddev->private;
5496+
54965497
split = bio_split(raid_bio, sectors, GFP_NOIO, &conf->bio_split);
54975498
bio_chain(split, raid_bio);
5499+
trace_block_split(split, raid_bio->bi_iter.bi_sector);
54985500
submit_bio_noacct(raid_bio);
54995501
raid_bio = split;
55005502
}

0 commit comments

Comments
 (0)