io_uring/rw: add write support for IOCB_DIO_DEFER
authorJens Axboe <axboe@kernel.dk>
Sat, 8 Jul 2023 16:03:52 +0000 (10:03 -0600)
committerJens Axboe <axboe@kernel.dk>
Fri, 21 Jul 2023 14:06:16 +0000 (08:06 -0600)
commit9a15a4060e47cc28a5320411d597b1a0306d2d82
treead3c3132f456721e644aa87c691418aaeba65d81
parentfc146276a4675dc4ca17af3a021077a84058c1da
io_uring/rw: add write support for IOCB_DIO_DEFER

If the filesystem dio handler understands IOCB_DIO_DEFER, we'll get
a kiocb->ki_complete() callback with kiocb->dio_complete set. In that
case, rather than complete the IO directly through task_work, queue
up an intermediate task_work handler that first processes this
callback and then immediately completes the request.

For XFS, this avoids a punt through a workqueue, which is a lot less
efficient and adds latency to lower queue depth (or sync) O_DIRECT
writes.

Only do this for non-polled IO, as polled IO doesn't need this kind
of deferral as it always completes within the task itself. This then
avoids a check for deferral in the polled IO completion handler.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/rw.c