Skip to contentSkip to conversation

Patch "target: Fix compare_and_write_callback handling for non GOOD status" has been added to the 4.9-stable tree

PATCH [email protected] 1 participant 1 message May 16, 2017

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

target: Fix compare_and_write_callback handling for non GOOD status

to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
target-fix-compare_and_write_callback-handling-for-non-good-status.patch
and it can be found in the queue-4.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From a71a5dc7f833943998e97ca8fa6a4c708a0ed1a9 Mon Sep 17 00:00:00 2001

From: Nicholas Bellinger <[email protected]>
Date: Tue, 11 Apr 2017 16:24:16 -0700
Subject: target: Fix compare_and_write_callback handling for non GOOD status

From: Nicholas Bellinger <[email protected]>

commit a71a5dc7f833943998e97ca8fa6a4c708a0ed1a9 upstream.

Following the bugfix for handling non SAM_STAT_GOOD COMPARE_AND_WRITE status during COMMIT phase in commit 9b2792c3da1, the same bug exists for the READ phase as well.

This would manifest first as a lost SCSI response, and eventual hung task during fabric driver logout or re-login, as existing shutdown logic waited for the COMPARE_AND_WRITE se_cmd->cmd_kref to reach zero.

To address this bug, compare_and_write_callback() has been changed to set post_ret = 1 and return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE as necessary to signal failure status.

---
 drivers/target/target_core_sbc.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/target/target_core_sbc.c +4 -1
@@ -506,8 +506,11 @@ static sense_reason_t compare_and_write_
 	 * been failed with a non-zero SCSI status.
 	 */
 	if (cmd->scsi_status) {
-		pr_err("compare_and_write_callback: non zero scsi_status:"
+		pr_debug("compare_and_write_callback: non zero scsi_status:"
 			" 0x%02x\n", cmd->scsi_status);
+		*post_ret = 1;
+		if (cmd->scsi_status == SAM_STAT_CHECK_CONDITION)
+			ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
 		goto out;
 	}
 

Patches currently in stable-queue which might be from [email protected] are

queue-4.9/target-fix-compare_and_write_callback-handling-for-non-good-status.patch queue-4.9/target-fileio-fix-zero-length-read-and-write-handling.patch queue-4.9/iscsi-target-set-session_fall_back_to_erl0-when-forcing-reinstatement.patch