History

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.

Jens Axboe committed 8 years ago

Commit cb700eb1 parent d34513d1 file · +11 −2Browse files

Unified · Split

fs/block_dev.c+11−2
@@ -330,6 +330,7 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages) · 329 unmodified lines
330330 struct blk_plug plug;
331331 struct blkdev_dio *dio;
332332 struct bio *bio;
333+ bool is_poll = (iocb->ki_flags & IOCB_HIPRI) != 0;
333334 bool is_read = (iov_iter_rw(iter) == READ), is_sync;
334335 loff_t pos = iocb->ki_pos;
335336 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) · 17 unmodified lines
353354 dio->multi_bio = false;
354355 dio->should_dirty = is_read && iter_is_iovec(iter);
355356
356− blk_start_plug(&plug);
357+ /*
358+ * Don't plug for HIPRI/polled IO, as those should go straight
359+ * to issue
360+ */
361+ if (!is_poll)
362+ blk_start_plug(&plug);
363+
357364 for (;;) {
358365 bio_set_dev(bio, bdev);
359366 bio->bi_iter.bi_sector = pos >> 9;
@@ -400,7 +407,9 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages) · 40 unmodified lines
400407 submit_bio(bio);
401408 bio = bio_alloc(GFP_KERNEL, nr_pages);
402409 }
403− blk_finish_plug(&plug);
410+
411+ if (!is_poll)
412+ blk_finish_plug(&plug);
404413
405414 if (!is_sync)
406415 return -EIOCBQUEUED;