From: Israel Rukshin <israelr@xxxxxxxxxxxx> Transport drivers will use this field to determine if the request has metadata. Signed-off-by: Max Gurtovoy <maxg@xxxxxxxxxxxx> Signed-off-by: Israel Rukshin <israelr@xxxxxxxxxxxx> --- drivers/nvme/host/core.c | 6 ++++-- drivers/nvme/host/nvme.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index f3a184f..f34ff34 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -461,6 +461,7 @@ static inline void nvme_clear_nvme_request(struct request *req) if (!(req->rq_flags & RQF_DONTPREP)) { nvme_req(req)->retries = 0; nvme_req(req)->flags = 0; + nvme_req(req)->has_md = false; req->rq_flags |= RQF_DONTPREP; } } @@ -694,6 +695,8 @@ static inline blk_status_t nvme_setup_rw(struct nvme_ns *ns, nvme_assign_write_stream(ctrl, req, &control, &dsmgmt); if (ns->ms) { + nvme_req(req)->has_md = + ns->features & NVME_NS_MD_CTRL_SUPPORTED; /* * If formated with metadata, the block layer always provides a * metadata buffer if CONFIG_BLK_DEV_INTEGRITY is enabled. Else @@ -701,8 +704,7 @@ static inline blk_status_t nvme_setup_rw(struct nvme_ns *ns, * namespace capacity to zero to prevent any I/O. */ if (!blk_integrity_rq(req)) { - if (WARN_ON_ONCE(!(ns->features & - NVME_NS_MD_CTRL_SUPPORTED))) + if (WARN_ON_ONCE(!nvme_req(req)->has_md)) return BLK_STS_NOTSUPP; control |= NVME_RW_PRINFO_PRACT; } diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index 83296d0..a353255 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -139,6 +139,7 @@ struct nvme_request { u8 flags; u16 status; struct nvme_ctrl *ctrl; + bool has_md; }; /* -- 1.8.3.1