[PATCH 17/19] nvme-multipath: add nvme_mpath_head_queue_if_no_path()

John Garry
2026-02-25T15:41:13Z

Add a wrapper to call into mpath_head_queue_if_no_path().

The mpath_disk is added as we can be called from paths when the mpath_head
has not been allocated.

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
drivers/nvme/host/multipath.c | 10 ++++++++++
drivers/nvme/host/nvme.h | 5 +++++
2 files changed, 15 insertions(+)

diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
index bd96211123fee..fdb7f3b55a197 100644
--- a/drivers/nvme/host/multipath.c
+++ b/drivers/nvme/host/multipath.c
@@ -214,6 +214,16 @@ void nvme_mpath_end_request(struct request *rq)
nvme_req(rq)->start_time);
}

+bool nvme_mpath_head_queue_if_no_path(struct nvme_ns_head *head)
+{
+ struct mpath_disk *mpath_disk = head->mpath_disk;
+
+ if (!mpath_disk)
+ return false;
+
+ return mpath_head_queue_if_no_path(mpath_disk->mpath_head);
+}
+
void nvme_kick_requeue_lists(struct nvme_ctrl *ctrl)
{
struct nvme_ns *ns;
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index 3c08212e4a54f..e276a7bcb7aff 100644
--- a/drivers/nvme/host/nvme.h
+++ b/drivers/nvme/host/nvme.h
@@ -1052,6 +1052,7 @@ void nvme_mpath_clear_ctrl_paths(struct nvme_ctrl *ctrl);
void nvme_mpath_remove_disk(struct nvme_ns_head *head);
void nvme_mpath_start_request(struct request *rq);
void nvme_mpath_end_request(struct request *rq);
+bool nvme_mpath_head_queue_if_no_path(struct nvme_ns_head *head);
int nvme_mpath_bdev_ioctl(struct block_device *bdev,
struct mpath_device *mpath_device, blk_mode_t mode,
unsigned int cmd, unsigned long arg, int srcu_idx);
@@ -1196,6 +1197,10 @@ static inline bool nvme_mpath_queue_if_no_path(struct nvme_ns_head *head)
{
return false;
}
+static inline bool nvme_mpath_head_queue_if_no_path(struct nvme_ns_head *head)
+{
+ return false;
+}
#endif /* CONFIG_NVME_MULTIPATH */

int nvme_ns_get_unique_id(struct nvme_ns *ns, u8 id[16],
--
2.43.5