nvme: improved uring polling
authorKeith Busch <kbusch@kernel.org>
Mon, 12 Jun 2023 19:03:43 +0000 (12:03 -0700)
committerJens Axboe <axboe@kernel.dk>
Wed, 28 Jun 2023 22:09:41 +0000 (16:09 -0600)
commit9408d8a37e6cce8803681ab816383450a056c3a9
treefc58ad2be830fed67c5a6e8b4124772aeadc7fcb
parentf6c80cffcd47a2d41943e3a41fbe9034d9f6d7b0
nvme: improved uring polling

Drivers can poll requests directly, so use that. We just need to ensure
the driver's request was allocated from a polled hctx, so a special
driver flag is added to struct io_uring_cmd.

The allows unshared and multipath namespaces to use the same polling
callback, and multipath is guaranteed to get the same queue as the
command was submitted on. Previously multipath polling might check a
different path and poll the wrong info.

The other bonus is we don't need a bio payload in order to poll,
allowing commands like 'flush' and 'write zeroes' to be submitted on the
same high priority queue as read and write commands.

Finally, using the request based polling skips the unnecessary bio
overhead.

Signed-off-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20230612190343.2087040-3-kbusch@meta.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/nvme/host/ioctl.c
drivers/nvme/host/multipath.c
drivers/nvme/host/nvme.h
include/uapi/linux/io_uring.h