diff options
author | Nicholas Bellinger <nab@linux-iscsi.org> | 2011-08-08 19:03:38 -0700 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2011-08-22 19:26:20 +0000 |
commit | 16ab8e60a0ebc22cfbe61d84e620457a15f3a0bc (patch) | |
tree | a6ccaf22e12140045f70678d6dd213154cd11087 | |
parent | 387e96c05299ca7a0ade874f343f91f0b01086a0 (diff) | |
download | linux-16ab8e60a0ebc22cfbe61d84e620457a15f3a0bc.tar.gz linux-16ab8e60a0ebc22cfbe61d84e620457a15f3a0bc.tar.bz2 linux-16ab8e60a0ebc22cfbe61d84e620457a15f3a0bc.zip |
target: Fix write payload exception handling with ->new_cmd_map
This patch fixes a bug for fabrics using tfo->new_cmd_map() that
are expect transport_generic_request_failure() to be calling
transport_send_check_condition_and_sense() for both READ and WRITE,
instead of only for READ exceptions.
This was originally observed with a failed WRITE_SAME_16 w/ unmap=0
using tcm_loop.
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
-rw-r--r-- | drivers/target/target_core_transport.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index cc5a339d4d5a..fd7d4518b8ef 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -2053,8 +2053,14 @@ static void transport_generic_request_failure( cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; break; } - - if (!sc) + /* + * If a fabric does not define a cmd->se_tfo->new_cmd_map caller, + * make the call to transport_send_check_condition_and_sense() + * directly. Otherwise expect the fabric to make the call to + * transport_send_check_condition_and_sense() after handling + * possible unsoliticied write data payloads. + */ + if (!sc && !cmd->se_tfo->new_cmd_map) transport_new_cmd_failure(cmd); else { ret = transport_send_check_condition_and_sense(cmd, |