| From foo@baz Sun May 27 17:33:38 CEST 2018 |
| From: Max Gurtovoy <maxg@mellanox.com> |
| Date: Wed, 24 Jan 2018 17:31:45 +0200 |
| Subject: nvmet: fix PSDT field check in command format |
| |
| From: Max Gurtovoy <maxg@mellanox.com> |
| |
| [ Upstream commit bffd2b61670feef18d2535e9b53364d270a1c991 ] |
| |
| PSDT field section according to NVM_Express-1.3: |
| "This field specifies whether PRPs or SGLs are used for any data |
| transfer associated with the command. PRPs shall be used for all |
| Admin commands for NVMe over PCIe. SGLs shall be used for all Admin |
| and I/O commands for NVMe over Fabrics. This field shall be set to |
| 01b for NVMe over Fabrics 1.0 implementations. |
| |
| Suggested-by: Idan Burstein <idanb@mellanox.com> |
| Signed-off-by: Max Gurtovoy <maxg@mellanox.com> |
| Reviewed-by: Christoph Hellwig <hch@lst.de> |
| Signed-off-by: Keith Busch <keith.busch@intel.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/nvme/target/core.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/nvme/target/core.c |
| +++ b/drivers/nvme/target/core.c |
| @@ -491,9 +491,12 @@ bool nvmet_req_init(struct nvmet_req *re |
| goto fail; |
| } |
| |
| - /* either variant of SGLs is fine, as we don't support metadata */ |
| - if (unlikely((flags & NVME_CMD_SGL_ALL) != NVME_CMD_SGL_METABUF && |
| - (flags & NVME_CMD_SGL_ALL) != NVME_CMD_SGL_METASEG)) { |
| + /* |
| + * For fabrics, PSDT field shall describe metadata pointer (MPTR) that |
| + * contains an address of a single contiguous physical buffer that is |
| + * byte aligned. |
| + */ |
| + if (unlikely((flags & NVME_CMD_SGL_ALL) != NVME_CMD_SGL_METABUF)) { |
| status = NVME_SC_INVALID_FIELD | NVME_SC_DNR; |
| goto fail; |
| } |