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
330 struct blk_plug plug;330 struct blk_plug plug;
331 struct blkdev_dio *dio;331 struct blkdev_dio *dio;
332 struct bio *bio;332 struct bio *bio;
333 bool is_poll = (iocb->ki_flags & IOCB_HIPRI) != 0;
333 bool is_read = (iov_iter_rw(iter) == READ), is_sync;334 bool is_read = (iov_iter_rw(iter) == READ), is_sync;
334 loff_t pos = iocb->ki_pos;335 loff_t pos = iocb->ki_pos;
335 blk_qc_t qc = BLK_QC_T_NONE;336 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
353 dio->multi_bio = false;354 dio->multi_bio = false;
354 dio->should_dirty = is_read && iter_is_iovec(iter);355 dio->should_dirty = is_read && iter_is_iovec(iter);
355 356
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
357 for (;;) {364 for (;;) {
358 bio_set_dev(bio, bdev);365 bio_set_dev(bio, bdev);
359 bio->bi_iter.bi_sector = pos >> 9;366 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
400 submit_bio(bio);407 submit_bio(bio);
401 bio = bio_alloc(GFP_KERNEL, nr_pages);408 bio = bio_alloc(GFP_KERNEL, nr_pages);
402 }409 }
403 blk_finish_plug(&plug);410
411 if (!is_poll)
412 blk_finish_plug(&plug);
404 413
405 if (!is_sync)414 if (!is_sync)
406 return -EIOCBQUEUED;415 return -EIOCBQUEUED;