scsi: ibmvscsis: Clean up properly if target_submit_cmd/tmr fails
authorMichael Cyr <mikecyr@us.ibm.com>
Fri, 17 Mar 2017 00:48:20 +0000 (00:48 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Mar 2017 11:43:36 +0000 (12:43 +0100)
[ Upstream commit 7435b32e2d2fb5da6c2ae9b9c8ce56d8a3cb3bc3 ]

Signed-off-by: Michael Cyr <mikecyr@us.ibm.com>
Signed-off-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
Tested-by: Steven Royer <seroyer@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c

index 8d5eeb1d233875cdd8fe9fc4ee6052159a33e7a7..e4cd8ffe7429dd38f6ec1fe4d724dd982348b387 100644 (file)
@@ -2552,6 +2552,10 @@ static void ibmvscsis_parse_cmd(struct scsi_info *vscsi,
                               data_len, attr, dir, 0);
        if (rc) {
                dev_err(&vscsi->dev, "target_submit_cmd failed, rc %d\n", rc);
+               spin_lock_bh(&vscsi->intr_lock);
+               list_del(&cmd->list);
+               ibmvscsis_free_cmd_resources(vscsi, cmd);
+               spin_unlock_bh(&vscsi->intr_lock);
                goto fail;
        }
        return;
@@ -2631,6 +2635,9 @@ static void ibmvscsis_parse_task(struct scsi_info *vscsi,
                if (rc) {
                        dev_err(&vscsi->dev, "target_submit_tmr failed, rc %d\n",
                                rc);
+                       spin_lock_bh(&vscsi->intr_lock);
+                       list_del(&cmd->list);
+                       spin_unlock_bh(&vscsi->intr_lock);
                        cmd->se_cmd.se_tmr_req->response =
                                TMR_FUNCTION_REJECTED;
                }