From: Nicholas Bellinger Date: Tue, 6 Nov 2012 23:43:53 +0000 (-0800) Subject: target: Fix possible TFO->write_pending() sense_reason_t silent WRITE corruption X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=b69c1fcf0a7cb2b7dff12ce4e8506b395431a52c;p=deliverable%2Flinux.git target: Fix possible TFO->write_pending() sense_reason_t silent WRITE corruption This patch fixes a possible case in transport_generic_new_cmd() where a failure from TFO->write_pending() from a fabric module return something other than -EAGAIN or -ENOMEM would cause a failed WRITE to silently succeed. Go ahead and return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE for this special case instead of only just making noise with WARN_ON(). (v2: Fix incorrect exception return for all cases) Cc: Christoph Hellwig Cc: Roland Dreier Signed-off-by: Nicholas Bellinger --- diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 98044bf1da08..63d7848bf96c 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -2127,7 +2127,7 @@ transport_generic_new_cmd(struct se_cmd *cmd) /* fabric drivers should only return -EAGAIN or -ENOMEM as error */ WARN_ON(ret); - return 0; + return (!ret) ? 0 : TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; queue_full: pr_debug("Handling write_pending QUEUE__FULL: se_cmd: %p\n", cmd);