From: Jens Axboe Date: Fri, 16 Nov 2018 02:56:53 +0000 (-0700) Subject: block: don't plug for aio/O_DIRECT HIPRI IO X-Git-Tag: Ubuntu-5.13.0-19.19~9430^2~221 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=cb700eb3faa488fbb4b60689adec84032d7cf24a;p=mirror_ubuntu-jammy-kernel.git block: don't plug for aio/O_DIRECT HIPRI IO Those will go straight to issue inside blk-mq, so don't bother setting up a block plug for them. Reviewed-by: Christoph Hellwig Signed-off-by: Jens Axboe --- diff --git a/fs/block_dev.c b/fs/block_dev.c index e72b119ede84..4d79bc80fb41 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -330,6 +330,7 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages) struct blk_plug plug; struct blkdev_dio *dio; struct bio *bio; + bool is_poll = (iocb->ki_flags & IOCB_HIPRI) != 0; bool is_read = (iov_iter_rw(iter) == READ), is_sync; loff_t pos = iocb->ki_pos; blk_qc_t qc = BLK_QC_T_NONE; @@ -353,7 +354,13 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages) dio->multi_bio = false; dio->should_dirty = is_read && iter_is_iovec(iter); - blk_start_plug(&plug); + /* + * Don't plug for HIPRI/polled IO, as those should go straight + * to issue + */ + if (!is_poll) + blk_start_plug(&plug); + for (;;) { bio_set_dev(bio, bdev); bio->bi_iter.bi_sector = pos >> 9; @@ -400,7 +407,9 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages) submit_bio(bio); bio = bio_alloc(GFP_KERNEL, nr_pages); } - blk_finish_plug(&plug); + + if (!is_poll) + blk_finish_plug(&plug); if (!is_sync) return -EIOCBQUEUED;