nvme: enable retries for authentication commands
Authentication commands might trigger a lengthy computation on the controller or even a callout to an external entity. In these cases the controller might return a status without the DNR bit set, indicating that the command should be retried. This patch enables retries for authentication commands by setting NVME_SUBMIT_RETRY for __nvme_submit_sync_cmd(). Reported-by: Martin George <marting@netapp.com> Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Keith Busch <kbusch@kernel.org>
This commit is contained in:
parent
bd2687f2e5
commit
48dae46676
@ -58,7 +58,7 @@ static int nvme_auth_submit(struct nvme_ctrl *ctrl, int qid,
|
||||
void *data, size_t data_len, bool auth_send)
|
||||
{
|
||||
struct nvme_command cmd = {};
|
||||
nvme_submit_flags_t flags = 0;
|
||||
nvme_submit_flags_t flags = NVME_SUBMIT_RETRY;
|
||||
struct request_queue *q = ctrl->fabrics_q;
|
||||
int ret;
|
||||
|
||||
|
@ -1070,6 +1070,8 @@ int __nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd,
|
||||
if (IS_ERR(req))
|
||||
return PTR_ERR(req);
|
||||
nvme_init_request(req, cmd);
|
||||
if (flags & NVME_SUBMIT_RETRY)
|
||||
req->cmd_flags &= ~REQ_FAILFAST_DRIVER;
|
||||
|
||||
if (buffer && bufflen) {
|
||||
ret = blk_rq_map_kern(q, req, buffer, bufflen, GFP_KERNEL);
|
||||
|
@ -849,6 +849,8 @@ enum {
|
||||
NVME_SUBMIT_NOWAIT = (__force nvme_submit_flags_t)(1 << 1),
|
||||
/* Set BLK_MQ_REQ_RESERVED when allocating request */
|
||||
NVME_SUBMIT_RESERVED = (__force nvme_submit_flags_t)(1 << 2),
|
||||
/* Retry command when NVME_SC_DNR is not set in the result */
|
||||
NVME_SUBMIT_RETRY = (__force nvme_submit_flags_t)(1 << 3),
|
||||
};
|
||||
|
||||
int nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd,
|
||||
|
Loading…
x
Reference in New Issue
Block a user