Message ID | b766a125d417b3675f0abcdf32ac038c3c235ce9.1635006010.git.asml.silence@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block optimisations | expand |
On Sat, Oct 23, 2021 at 05:21:36PM +0100, Pavel Begunkov wrote: > +static inline void bio_set_polled_async(struct bio *bio, struct kiocb *kiocb) > +{ > + bio->bi_opf |= REQ_POLLED | REQ_NOWAIT; > +} As mentioned last time I'm a little skeptical of this optimization. But if you an Jens thing it is worth it just drop this helper and assign the flags directly.
On 10/25/21 08:36, Christoph Hellwig wrote: > On Sat, Oct 23, 2021 at 05:21:36PM +0100, Pavel Begunkov wrote: >> +static inline void bio_set_polled_async(struct bio *bio, struct kiocb *kiocb) >> +{ >> + bio->bi_opf |= REQ_POLLED | REQ_NOWAIT; >> +} > > As mentioned last time I'm a little skeptical of this optimization. But > if you an Jens thing it is worth it just drop this helper and assign > the flags directly. Ok. I'll keep it last in the series, looks Jens doesn't mind applying patchsets partially.
diff --git a/block/fops.c b/block/fops.c index 997904963a9d..9cb436de92bb 100644 --- a/block/fops.c +++ b/block/fops.c @@ -367,14 +367,13 @@ static ssize_t __blkdev_direct_IO_async(struct kiocb *iocb, task_io_account_write(bio->bi_iter.bi_size); } - if (iocb->ki_flags & IOCB_NOWAIT) - bio->bi_opf |= REQ_NOWAIT; - if (iocb->ki_flags & IOCB_HIPRI) { - bio_set_polled(bio, iocb); + bio_set_polled_async(bio, iocb); submit_bio(bio); WRITE_ONCE(iocb->private, bio); } else { + if (iocb->ki_flags & IOCB_NOWAIT) + bio->bi_opf |= REQ_NOWAIT; submit_bio(bio); } return -EIOCBQUEUED; diff --git a/include/linux/bio.h b/include/linux/bio.h index fe6bdfbbef66..b64161473f3e 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h @@ -738,6 +738,11 @@ static inline void bio_set_polled(struct bio *bio, struct kiocb *kiocb) bio->bi_opf |= REQ_NOWAIT; } +static inline void bio_set_polled_async(struct bio *bio, struct kiocb *kiocb) +{ + bio->bi_opf |= REQ_POLLED | REQ_NOWAIT; +} + struct bio *blk_next_bio(struct bio *bio, unsigned int nr_pages, gfp_t gfp); #endif /* __LINUX_BIO_H */
If we know that a iocb is async we can optimise bio_set_polled() a bit, add a new helper bio_set_polled_async(). Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> --- block/fops.c | 7 +++---- include/linux/bio.h | 5 +++++ 2 files changed, 8 insertions(+), 4 deletions(-)