[PATCH 03/19] nvme-multipath: add nvme_is_mpath_request()

John Garry
2026-02-25T15:40:45Z

Add a helper to find if a request has flag REQ_NVME_MPATH set.

An advantage of this is that for !CONFIG_NVME_MULTIPATH, the code is
compiled out, so we avoid the check.

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

diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 76249871dd7c2..2d0faec902eb2 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -409,7 +409,7 @@ static inline enum nvme_disposition nvme_decide_disposition(struct request *req)
if ((nvme_req(req)->status & NVME_SCT_SC_MASK) == NVME_SC_AUTH_REQUIRED)
return AUTHENTICATE;

- if (req->cmd_flags & REQ_NVME_MPATH) {
+ if (nvme_is_mpath_request(req)) {
if (nvme_is_path_error(nvme_req(req)->status) ||
blk_queue_dying(req->q))
return FAILOVER;
@@ -442,7 +442,7 @@ static inline void __nvme_end_req(struct request *req)
}
nvme_end_req_zoned(req);
nvme_trace_bio_complete(req);
- if (req->cmd_flags & REQ_NVME_MPATH)
+ if (nvme_is_mpath_request(req))
nvme_mpath_end_request(req);
}

@@ -762,7 +762,7 @@ blk_status_t nvme_fail_nonready_command(struct nvme_ctrl *ctrl,
state != NVME_CTRL_DELETING &&
state != NVME_CTRL_DEAD &&
!test_bit(NVME_CTRL_FAILFAST_EXPIRED, &ctrl->flags) &&
- !blk_noretry_request(rq) && !(rq->cmd_flags & REQ_NVME_MPATH))
+ !blk_noretry_request(rq) && !nvme_is_mpath_request(rq))
return BLK_STS_RESOURCE;

if (!(rq->rq_flags & RQF_DONTPREP))
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index 397e8685f6c38..6b5977610d886 100644
--- a/drivers/nvme/host/nvme.h
+++ b/drivers/nvme/host/nvme.h
@@ -1042,11 +1042,16 @@ 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);

+static inline bool nvme_is_mpath_request(struct request *req)
+{
+ return req->cmd_flags & REQ_NVME_MPATH;
+}
+
static inline void nvme_trace_bio_complete(struct request *req)
{
struct nvme_ns *ns = req->q->queuedata;

- if ((req->cmd_flags & REQ_NVME_MPATH) && req->bio)
+ if (nvme_is_mpath_request(req) && req->bio)
trace_block_bio_complete(ns->head->disk->queue, req->bio);
}

@@ -1145,6 +1150,10 @@ static inline void nvme_mpath_start_freeze(struct nvme_subsystem *subsys)
static inline void nvme_mpath_default_iopolicy(struct nvme_subsystem *subsys)
{
}
+static inline bool nvme_is_mpath_request(struct request *req)
+{
+ return false;
+}
static inline void nvme_mpath_start_request(struct request *rq)
{
}
@@ -1213,7 +1222,7 @@ static inline void nvme_hwmon_exit(struct nvme_ctrl *ctrl)

static inline void nvme_start_request(struct request *rq)
{
- if (rq->cmd_flags & REQ_NVME_MPATH)
+ if (nvme_is_mpath_request(rq))
nvme_mpath_start_request(rq);
blk_mq_start_request(rq);
}
--
2.43.5