lkml.org 
[lkml]   [2020]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH v16 1/9] nvme-core: Clear any SGL flags in passthru commands
    The host driver should decide whether to use SGLs or PRPs and they
    currently assume the flags are cleared after the call to
    nvme_setup_cmd(). However, passed-through commands may erroneously
    set these bits; so clear them for all cases.

    Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    ---
    drivers/nvme/host/core.c | 10 +++++++++-
    1 file changed, 9 insertions(+), 1 deletion(-)

    diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
    index 1d7c7afb1348..6f80bd78eba6 100644
    --- a/drivers/nvme/host/core.c
    +++ b/drivers/nvme/host/core.c
    @@ -593,6 +593,14 @@ static void nvme_assign_write_stream(struct nvme_ctrl *ctrl,
    req->q->write_hints[streamid] += blk_rq_bytes(req) >> 9;
    }

    +static void nvme_setup_passthrough(struct request *req,
    + struct nvme_command *cmd)
    +{
    + memcpy(cmd, nvme_req(req)->cmd, sizeof(*cmd));
    + /* passthru commands should let the driver set the SGL flags */
    + cmd->common.flags &= ~NVME_CMD_SGL_ALL;
    +}
    +
    static inline void nvme_setup_flush(struct nvme_ns *ns,
    struct nvme_command *cmnd)
    {
    @@ -758,7 +766,7 @@ blk_status_t nvme_setup_cmd(struct nvme_ns *ns, struct request *req,
    switch (req_op(req)) {
    case REQ_OP_DRV_IN:
    case REQ_OP_DRV_OUT:
    - memcpy(cmd, nvme_req(req)->cmd, sizeof(*cmd));
    + nvme_setup_passthrough(req, cmd);
    break;
    case REQ_OP_FLUSH:
    nvme_setup_flush(ns, cmd);
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-07-24 19:25    [W:5.161 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site