aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Smart <jsmart2021@gmail.com>2017-09-21 11:13:49 -0400
committerJens Axboe <axboe@kernel.dk>2017-09-25 14:42:11 -0400
commit8cbd96a6285e8eb65232b5afd3e8d9418453a61c (patch)
treeb152e6d500ae8aa28866a80f9dd4d6dd893d11f0
parentf5c156c4c29a3d87176dd6e5c099388e187ec29b (diff)
nvme: fix sqhd reference when admin queue connect fails
Fix bug in sqhd patch. It wasn't the sq that was at risk. In the case where the admin queue connect command fails, the sq->size field is not set. Therefore, this becomes a divide by zero error. Add a quick check to bypass under this failure condition. Signed-off-by: James Smart <james.smart@broadcom.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--drivers/nvme/target/core.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
index c2a768a94235..1b208beeef50 100644
--- a/drivers/nvme/target/core.c
+++ b/drivers/nvme/target/core.c
@@ -390,7 +390,8 @@ static void __nvmet_req_complete(struct nvmet_req *req, u16 status)
390 if (status) 390 if (status)
391 nvmet_set_status(req, status); 391 nvmet_set_status(req, status);
392 392
393 req->sq->sqhd = (req->sq->sqhd + 1) % req->sq->size; 393 if (req->sq->size)
394 req->sq->sqhd = (req->sq->sqhd + 1) % req->sq->size;
394 req->rsp->sq_head = cpu_to_le16(req->sq->sqhd); 395 req->rsp->sq_head = cpu_to_le16(req->sq->sqhd);
395 req->rsp->sq_id = cpu_to_le16(req->sq->qid); 396 req->rsp->sq_id = cpu_to_le16(req->sq->qid);
396 req->rsp->command_id = req->cmd->common.command_id; 397 req->rsp->command_id = req->cmd->common.command_id;