Skip to content

Commit 74f4cf2

Browse files
author
Nicholas Bellinger
committed
target: Fix regression bug with handling of zero-length data CDBs
This patch fixes a regression bug with the handling of zero-length data CDBs within transport_generic_new_cmd() code. The bug was introduced with the following commit as part of the single task conversion work: commit 4101f0a Author: Christoph Hellwig <[email protected]> Date: Tue Apr 24 00:25:03 2012 -0400 target: always allocate a single task where the zero-length check for SCF_SCSI_DATA_SG_IO_CDB was incorrectly changed to SCF_SCSI_CONTROL_SG_IO_CDB because of the seperate comment in transport_generic_new_cmd() wrt to control CDBs zero-length handling introduced in: commit 91ec1d3 Author: Nicholas Bellinger <[email protected]> Date: Fri Jan 13 12:01:34 2012 -0800 target: Add workaround for zero-length control CDB handling So go ahead and change transport_generic_new_cmd() to handle control+data zero-length CDBs in the same manner for this special case. Tested with iscsi-target + loopback fabric port LUNs on 3.6-rc0 code. This patch will also need to be picked up for 3.5-stable. (hch: Add proper comment in transport_generic_new_cmd) Cc: Christoph Hellwig <[email protected]> Cc: Roland Dreier <[email protected]> Cc: Andy Grover <[email protected]> Cc: [email protected] Signed-off-by: Nicholas Bellinger <[email protected]>
1 parent 1d2a2cd commit 74f4cf2

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

drivers/target/target_core_transport.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2323,9 +2323,12 @@ int transport_generic_new_cmd(struct se_cmd *cmd)
23232323
if (ret < 0)
23242324
goto out_fail;
23252325
}
2326-
2327-
/* Workaround for handling zero-length control CDBs */
2328-
if (!(cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) && !cmd->data_length) {
2326+
/*
2327+
* If this command doesn't have any payload and we don't have to call
2328+
* into the fabric for data transfers, go ahead and complete it right
2329+
* away.
2330+
*/
2331+
if (!cmd->data_length) {
23292332
spin_lock_irq(&cmd->t_state_lock);
23302333
cmd->t_state = TRANSPORT_COMPLETE;
23312334
cmd->transport_state |= CMD_T_ACTIVE;

0 commit comments

Comments
 (0)