fs: add O_DIRECT and aio support for sending down write life time hints
authorJens Axboe <axboe@kernel.dk>
Tue, 27 Jun 2017 17:01:22 +0000 (11:01 -0600)
committerJens Axboe <axboe@kernel.dk>
Tue, 27 Jun 2017 18:05:36 +0000 (12:05 -0600)
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/aio.c
fs/block_dev.c
fs/direct-io.c
fs/iomap.c

index 34027b67e2f4bc42be8f6126956b7d07d3937f0f..dcad3a66748c041a48588b612f85fae78086f5f5 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1568,6 +1568,7 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
        req->common.ki_pos = iocb->aio_offset;
        req->common.ki_complete = aio_complete;
        req->common.ki_flags = iocb_flags(req->common.ki_filp);
+       req->common.ki_hint = file_write_hint(file);
 
        if (iocb->aio_flags & IOCB_FLAG_RESFD) {
                /*
index dd91c99e9ba05932d88a96f17250a91cbb5a6c10..2c5f08696fff0ada5d4a54ba334cdb93e3861554 100644 (file)
@@ -225,6 +225,7 @@ __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter,
        bio_init(&bio, vecs, nr_pages);
        bio.bi_bdev = bdev;
        bio.bi_iter.bi_sector = pos >> 9;
+       bio.bi_write_hint = iocb->ki_hint;
        bio.bi_private = current;
        bio.bi_end_io = blkdev_bio_end_io_simple;
 
@@ -360,6 +361,7 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
        for (;;) {
                bio->bi_bdev = bdev;
                bio->bi_iter.bi_sector = pos >> 9;
+               bio->bi_write_hint = iocb->ki_hint;
                bio->bi_private = dio;
                bio->bi_end_io = blkdev_bio_end_io;
 
index c87077d1dc33ee85bf4aee7bfda17d0b68f20d3b..08cf27811e5af22b62a5330a2f21b0d0af25de77 100644 (file)
@@ -385,6 +385,8 @@ dio_bio_alloc(struct dio *dio, struct dio_submit *sdio,
        else
                bio->bi_end_io = dio_bio_end_io;
 
+       bio->bi_write_hint = dio->iocb->ki_hint;
+
        sdio->bio = bio;
        sdio->logical_offset_in_bio = sdio->cur_page_fs_offset;
 }
index c71a64b97fbac32bf187e374a2e5754e2f6a013a..fa6cd5b3f578797c05dac6a66f4db5170780a48e 100644 (file)
@@ -793,6 +793,7 @@ iomap_dio_actor(struct inode *inode, loff_t pos, loff_t length,
                bio->bi_bdev = iomap->bdev;
                bio->bi_iter.bi_sector =
                        iomap->blkno + ((pos - iomap->offset) >> 9);
+               bio->bi_write_hint = dio->iocb->ki_hint;
                bio->bi_private = dio;
                bio->bi_end_io = iomap_dio_bio_end_io;