nvme passthrough lacks multipathing capability and some of us have already expressed interest to see this plumbed. Most recently during LSFMM, around 2 months back. This series wires up multipathing for uring-passthrough commands. Attempt is not to affect the common path (i.e. when requeue/failover does not trigger) with allocation or deferral. The most important design bit is to treat "struct io_uring_cmd" in the same way as "struct bio" is treated by the block-based nvme multipath. Uring-commands are queued when path is not available, and resubmitted on discovery of new path. Also if passthrough command on multipath-node is failed, it is resubmitted on a different path. Testing: Using the upstream fio that support uring-passthrough: fio -iodepth=16 -rw=randread -ioengine=io_uring_cmd -bs=4k -numjobs=4 -size=1G -iodepth_batch_submit=16 -group_reporting -cmd_type=nvme -filename=/dev/ng0n1 -name=uring-pt 1. Multiple failover - every command is retried 1-5 times before completion 2. Fail nvme_find_path() - this tests completion post requeue 3. Combine above two 4. Repeat above but for passthrough commands which do not generate bio (e.g. flush command) Anuj Gupta (2): nvme: compact nvme_uring_cmd_pdu struct nvme-multipath: add multipathing for uring-passthrough commands Kanchan Joshi (2): io_uring, nvme: rename a function io_uring: grow a field in struct io_uring_cmd drivers/nvme/host/ioctl.c | 157 +++++++++++++++++++++++++++++----- drivers/nvme/host/multipath.c | 36 +++++++- drivers/nvme/host/nvme.h | 26 ++++++ include/linux/io_uring.h | 44 +++++++++- io_uring/uring_cmd.c | 4 +- 5 files changed, 237 insertions(+), 30 deletions(-) -- 2.25.1