block: add plug while submitting IO
authorYu Kuai <yukuai3@huawei.com>
Thu, 9 May 2024 12:38:25 +0000 (20:38 +0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 9 May 2024 13:57:37 +0000 (07:57 -0600)
So that if caller didn't use plug, for example, __blkdev_direct_IO_simple()
and __blkdev_direct_IO_async(), block layer can still benefit from caching
nsec time in the plug.

Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Link: https://lore.kernel.org/r/20240509123825.3225207-1-yukuai1@huaweicloud.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-core.c

index 47400a4fe851301cf0b816aac6a1ff18e59bc68b..8efee8faa4b63c2a765232ca7198aecd5d73e8c6 100644 (file)
@@ -646,11 +646,13 @@ static void __submit_bio(struct bio *bio)
 static void __submit_bio_noacct(struct bio *bio)
 {
        struct bio_list bio_list_on_stack[2];
+       struct blk_plug plug;
 
        BUG_ON(bio->bi_next);
 
        bio_list_init(&bio_list_on_stack[0]);
        current->bio_list = bio_list_on_stack;
+       blk_start_plug(&plug);
 
        do {
                struct request_queue *q = bdev_get_queue(bio->bi_bdev);
@@ -684,19 +686,23 @@ static void __submit_bio_noacct(struct bio *bio)
                bio_list_merge(&bio_list_on_stack[0], &bio_list_on_stack[1]);
        } while ((bio = bio_list_pop(&bio_list_on_stack[0])));
 
+       blk_finish_plug(&plug);
        current->bio_list = NULL;
 }
 
 static void __submit_bio_noacct_mq(struct bio *bio)
 {
        struct bio_list bio_list[2] = { };
+       struct blk_plug plug;
 
        current->bio_list = bio_list;
+       blk_start_plug(&plug);
 
        do {
                __submit_bio(bio);
        } while ((bio = bio_list_pop(&bio_list[0])));
 
+       blk_finish_plug(&plug);
        current->bio_list = NULL;
 }