target: Add workaround for zero-length control CDB handling
authorNicholas Bellinger <nab@linux-iscsi.org>
Fri, 13 Jan 2012 20:01:34 +0000 (12:01 -0800)
committerNicholas Bellinger <nab@linux-iscsi.org>
Wed, 18 Jan 2012 08:30:22 +0000 (08:30 +0000)
commit91ec1d3535b2acf12c599045cc19ad9be3c6a47b
tree12a312b34c2a932832ca02d28c082e86ab7d2813
parent9fbc8909876a2160044e71d376848973b9bfdc3f
target: Add workaround for zero-length control CDB handling

This patch adds a work-around for handling zero allocation length
control CDBs (type SCF_SCSI_CONTROL_SG_IO_CDB) that was causing an
OOPs with the following raw calls:

   # sg_raw -v /dev/sdd 3 0 0 0 0 0
   # sg_raw -v /dev/sdd 0x1a 0 1 0 0 0

This patch will follow existing zero-length handling for data I/O
and silently return with GOOD status.  This addresses the zero length
issue, but the proper long-term resolution for handling arbitary
allocation lengths will be to refactor out data-phase handling in
individual CDB emulation logic within target_core_cdb.c

Reported-by: Roland Dreier <roland@purestorage.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_transport.c