block: add REQ_HIPRI and inherit it from IOCB_HIPRI
We use IOCB_HIPRI to poll for IO in the caller instead of scheduling. This information is not available for (or after) IO submission. The driver may make different queue choices based on the type of IO, so make the fact that we will poll for this IO known to the lower layers as well. Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Keith Busch <keith.busch@intel.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
@@ -1553,6 +1553,7 @@ iomap_dio_zero(struct iomap_dio *dio, struct iomap *iomap, loff_t pos,
|
||||
unsigned len)
|
||||
{
|
||||
struct page *page = ZERO_PAGE(0);
|
||||
int flags = REQ_SYNC | REQ_IDLE;
|
||||
struct bio *bio;
|
||||
|
||||
bio = bio_alloc(GFP_KERNEL, 1);
|
||||
@@ -1561,9 +1562,12 @@ iomap_dio_zero(struct iomap_dio *dio, struct iomap *iomap, loff_t pos,
|
||||
bio->bi_private = dio;
|
||||
bio->bi_end_io = iomap_dio_bio_end_io;
|
||||
|
||||
if (dio->iocb->ki_flags & IOCB_HIPRI)
|
||||
flags |= REQ_HIPRI;
|
||||
|
||||
get_page(page);
|
||||
__bio_add_page(bio, page, len, 0);
|
||||
bio_set_op_attrs(bio, REQ_OP_WRITE, REQ_SYNC | REQ_IDLE);
|
||||
bio_set_op_attrs(bio, REQ_OP_WRITE, flags);
|
||||
|
||||
atomic_inc(&dio->ref);
|
||||
return submit_bio(bio);
|
||||
@@ -1662,6 +1666,9 @@ iomap_dio_bio_actor(struct inode *inode, loff_t pos, loff_t length,
|
||||
bio_set_pages_dirty(bio);
|
||||
}
|
||||
|
||||
if (dio->iocb->ki_flags & IOCB_HIPRI)
|
||||
bio->bi_opf |= REQ_HIPRI;
|
||||
|
||||
iov_iter_advance(dio->submit.iter, n);
|
||||
|
||||
dio->size += n;
|
||||
|
Reference in New Issue
Block a user