--- /dev/null
+From 9b5cd7f37e1e018432111333e2a67f78ba41edfe Mon Sep 17 00:00:00 2001
+From: Roland Dreier <roland@purestorage.com>
+Date: Tue, 22 Nov 2011 13:51:33 -0800
+Subject: target: Handle 0 correctly in transport_get_sectors_6()
+
+From: Roland Dreier <roland@purestorage.com>
+
+commit 9b5cd7f37e1e018432111333e2a67f78ba41edfe upstream.
+
+SBC-3 says:
+
+ A TRANSFER LENGTH field set to zero specifies that 256 logical
+ blocks shall be written. Any other value specifies the number
+ of logical blocks that shall be written.
+
+The old code was always just returning the value in the TRANSFER LENGTH
+byte. Fix this to return 256 if the byte is 0.
+
+Signed-off-by: Roland Dreier <roland@purestorage.com>
+Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/target/target_core_transport.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+--- a/drivers/target/target_core_transport.c
++++ b/drivers/target/target_core_transport.c
+@@ -2777,10 +2777,15 @@ static inline u32 transport_get_sectors_
+
+ /*
+ * Everything else assume TYPE_DISK Sector CDB location.
+- * Use 8-bit sector value.
++ * Use 8-bit sector value. SBC-3 says:
++ *
++ * A TRANSFER LENGTH field set to zero specifies that 256
++ * logical blocks shall be written. Any other value
++ * specifies the number of logical blocks that shall be
++ * written.
+ */
+ type_disk:
+- return (u32)cdb[4];
++ return cdb[4] ? : 256;
+ }
+
+ static inline u32 transport_get_sectors_10(