[PATCH for-next 0/4] nvme-multipathing for uring-passthrough

Kanchan Joshi
2022-07-11T11:08:16Z

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