From: Keith Busch Date: Thu, 25 Jun 2015 15:32:38 +0000 (-0700) Subject: NVMe: Return busy status on suspended queue X-Git-Tag: v4.1.12-92~311^2~8 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=4c7dfd0755869ce93d272475bc7f3cad3e88873b;p=users%2Fjedix%2Flinux-maple.git NVMe: Return busy status on suspended queue The sync path previously scheduled itself out unconditionally, but that shouldn't happen if the command wasn't posted to the submission queue. This patch returns immediately when the suspended queue returns busy status. Orabug: 21316131 Signed-off-by: Keith Busch Signed-off-by: Santosh Shilimkar --- diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c index 683dff272562..a08ee2d69b14 100644 --- a/drivers/block/nvme-core.c +++ b/drivers/block/nvme-core.c @@ -997,6 +997,7 @@ static int nvme_submit_sync_cmd(struct request *req, struct nvme_command *cmd, struct sync_cmd_info cmdinfo; struct nvme_cmd_info *cmd_rq = blk_mq_rq_to_pdu(req); struct nvme_queue *nvmeq = cmd_rq->nvmeq; + int ret; cmdinfo.task = current; cmdinfo.status = -EINTR; @@ -1006,7 +1007,10 @@ static int nvme_submit_sync_cmd(struct request *req, struct nvme_command *cmd, nvme_set_info(cmd_rq, &cmdinfo, sync_completion); set_current_state(TASK_UNINTERRUPTIBLE); - nvme_submit_cmd(nvmeq, cmd); + ret = nvme_submit_cmd(nvmeq, cmd); + if (ret) + return ret; + schedule(); if (result)