Message ID | 1498004526-4543-5-git-send-email-axboe@kernel.dk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> @@ -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_opf |= write_hint_to_opf(iocb_write_hint(dio->iocb)); > + > sdio->bio = bio; > sdio->logical_offset_in_bio = sdio->cur_page_fs_offset; > } > diff --git a/fs/iomap.c b/fs/iomap.c > index c71a64b97fba..9c9f8406018b 100644 > --- a/fs/iomap.c > +++ b/fs/iomap.c > @@ -804,6 +804,7 @@ iomap_dio_actor(struct inode *inode, loff_t pos, loff_t length, > > if (dio->flags & IOMAP_DIO_WRITE) { > bio_set_op_attrs(bio, REQ_OP_WRITE, REQ_SYNC | REQ_IDLE); > + bio->bi_opf |= write_hint_to_opf(inode_write_hint(inode)); This should be iocb based as well, otherwise you'll miss out on the per-file hints. Also please don't add a > 80 char line. (And yes, I should fix the one just above, too) > task_io_account_write(bio->bi_iter.bi_size); > } else { > bio_set_op_attrs(bio, REQ_OP_READ, 0); > -- > 2.7.4 > ---end quoted text---
On 06/26/2017 03:55 AM, Christoph Hellwig wrote: >> @@ -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_opf |= write_hint_to_opf(iocb_write_hint(dio->iocb)); >> + >> sdio->bio = bio; >> sdio->logical_offset_in_bio = sdio->cur_page_fs_offset; >> } >> diff --git a/fs/iomap.c b/fs/iomap.c >> index c71a64b97fba..9c9f8406018b 100644 >> --- a/fs/iomap.c >> +++ b/fs/iomap.c >> @@ -804,6 +804,7 @@ iomap_dio_actor(struct inode *inode, loff_t pos, loff_t length, >> >> if (dio->flags & IOMAP_DIO_WRITE) { >> bio_set_op_attrs(bio, REQ_OP_WRITE, REQ_SYNC | REQ_IDLE); >> + bio->bi_opf |= write_hint_to_opf(inode_write_hint(inode)); > > This should be iocb based as well, otherwise you'll miss out on > the per-file hints. Good catch, fixed up. > Also please don't add a > 80 char line. (And yes, I should fix the one > just above, too) I fixed up them both...
diff --git a/fs/block_dev.c b/fs/block_dev.c index dd91c99e9ba0..30e1fb65c2fa 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -183,6 +183,8 @@ static unsigned int dio_bio_write_op(struct kiocb *iocb) /* avoid the need for a I/O completion work item */ if (iocb->ki_flags & IOCB_DSYNC) op |= REQ_FUA; + + op |= write_hint_to_opf(iocb_write_hint(iocb)); return op; } diff --git a/fs/direct-io.c b/fs/direct-io.c index c87077d1dc33..5fea570551e5 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -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_opf |= write_hint_to_opf(iocb_write_hint(dio->iocb)); + sdio->bio = bio; sdio->logical_offset_in_bio = sdio->cur_page_fs_offset; } diff --git a/fs/iomap.c b/fs/iomap.c index c71a64b97fba..9c9f8406018b 100644 --- a/fs/iomap.c +++ b/fs/iomap.c @@ -804,6 +804,7 @@ iomap_dio_actor(struct inode *inode, loff_t pos, loff_t length, if (dio->flags & IOMAP_DIO_WRITE) { bio_set_op_attrs(bio, REQ_OP_WRITE, REQ_SYNC | REQ_IDLE); + bio->bi_opf |= write_hint_to_opf(inode_write_hint(inode)); task_io_account_write(bio->bi_iter.bi_size); } else { bio_set_op_attrs(bio, REQ_OP_READ, 0);