On 3/15/19 8:59 AM, Jens Axboe wrote: > Add hint on whether a read was served out of the page cache, or if it > hit media. This is useful for buffered async IO, O_DIRECT reads would > never have this set (for obvious reasons). > > If the read hit page cache, cqe->flags will have IOCQE_FLAG_CACHEHIT > set. Linus, curious on your opinion on this one. I had this as part of the original series, but removed it from the pull request due to the mincore etc discussions. Leaving the patch intact for you. This is part of a small series of improvements, which sit on top of a series of fixes for this release. > diff --git a/fs/io_uring.c b/fs/io_uring.c > index f66a4a5daf35..513df722702e 100644 > --- a/fs/io_uring.c > +++ b/fs/io_uring.c > @@ -635,10 +635,14 @@ static void kiocb_end_write(struct kiocb *kiocb) > static void io_complete_rw(struct kiocb *kiocb, long res, long res2) > { > struct io_kiocb *req = container_of(kiocb, struct io_kiocb, rw); > + unsigned ev_flags = 0; > > kiocb_end_write(kiocb); > > - io_cqring_add_event(req->ctx, req->user_data, res, 0); > + if (res > 0 && (req->flags & REQ_F_FORCE_NONBLOCK)) > + ev_flags = IOCQE_FLAG_CACHEHIT; > + > + io_cqring_add_event(req->ctx, req->user_data, res, ev_flags); > io_put_req(req); > } > > diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h > index e23408692118..24906e99fdc7 100644 > --- a/include/uapi/linux/io_uring.h > +++ b/include/uapi/linux/io_uring.h > @@ -69,6 +69,11 @@ struct io_uring_cqe { > __u32 flags; > }; > > +/* > + * io_uring_event->flags > + */ > +#define IOCQE_FLAG_CACHEHIT (1U << 0) /* IO did not hit media */ > + > /* > * Magic offsets for the application to mmap the data it needs > */ > -- Jens Axboe