aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target
diff options
context:
space:
mode:
authorRoland Dreier <roland@purestorage.com>2011-11-22 13:51:33 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2011-12-21 12:57:37 -0800
commit2afc2fbeaafb4c9a5ab0f92efa0fa739c95c26e4 (patch)
tree2d0416aba52c1762d960dbbb4e0f96a59ac8e8ef /drivers/target
parent58a48c4b50249df1bebcedca479f6faa7091bd0e (diff)
downloadkernel_samsung_smdk4412-2afc2fbeaafb4c9a5ab0f92efa0fa739c95c26e4.zip
kernel_samsung_smdk4412-2afc2fbeaafb4c9a5ab0f92efa0fa739c95c26e4.tar.gz
kernel_samsung_smdk4412-2afc2fbeaafb4c9a5ab0f92efa0fa739c95c26e4.tar.bz2
target: Handle 0 correctly in transport_get_sectors_6()
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>
Diffstat (limited to 'drivers/target')
-rw-r--r--drivers/target/target_core_transport.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index 4b9b716..1340ffd 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -2777,10 +2777,15 @@ static inline u32 transport_get_sectors_6(
/*
* 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(