浏览代码

target: Fix handling of aborted failed commands

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>
Bart Van Assche 8 年之前
父节点
当前提交
e3b88ee95b
共有 1 个文件被更改,包括 3 次插入0 次删除
  1. 3 0
      drivers/target/target_core_transport.c

+ 3 - 0
drivers/target/target_core_transport.c

@@ -1647,6 +1647,9 @@ void transport_generic_request_failure(struct se_cmd *cmd,
 {
 {
 	int ret = 0, post_ret = 0;
 	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"
 	pr_debug("-----[ Storage Engine Exception for cmd: %p ITT: 0x%08llx"
 		" CDB: 0x%02x\n", cmd, cmd->tag, cmd->t_task_cdb[0]);
 		" CDB: 0x%02x\n", cmd, cmd->tag, cmd->t_task_cdb[0]);
 	pr_debug("-----[ i_state: %d t_state: %d sense_reason: %d\n",
 	pr_debug("-----[ i_state: %d t_state: %d sense_reason: %d\n",