target: Fix handling of aborted failed commands
authorBart Van Assche <bart.vanassche@sandisk.com>
Wed, 15 Feb 2017 00:25:45 +0000 (16:25 -0800)
committerNicholas Bellinger <nab@linux-iscsi.org>
Mon, 20 Feb 2017 21:28:09 +0000 (13:28 -0800)
If a target driver (e.g. tcm_qla2xxx) calls
transport_generic_request_failure() to report that receiving data
has failed and that SCSI command has already been aborted by the
initiator, ensure that the SCSI status ABORTED is sent back to the
initiator instead of the sense code provided by the target driver.

Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: David Disseldorp <ddiss@suse.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_transport.c

index 22190003534dbcc28ab027af0b21353fcff13ab9..efb9e6f382019e77799c77b1a0d177a68fb07be0 100644 (file)
@@ -1647,6 +1647,9 @@ void transport_generic_request_failure(struct se_cmd *cmd,
 {
        int ret = 0, post_ret = 0;
 
+       if (transport_check_aborted_status(cmd, 1))
+               return;
+
        pr_debug("-----[ Storage Engine Exception for cmd: %p ITT: 0x%08llx"
                " CDB: 0x%02x\n", cmd, cmd->tag, cmd->t_task_cdb[0]);
        pr_debug("-----[ i_state: %d t_state: %d sense_reason: %d\n",