Boaz Harrosh commented on the "[PATCH v5] sg: relax 16 byte cdb restriction" thread that SCSI variable length commands (which are all SCSI commands greater than 16 bytes long) must themselves be a multiple of 4 bytes long. ChangeLog - limit the maximum cdb size permitted by the sg v3 interface to 252 bytes. Commands that large are called "variable length" and their length needs to be a multiple of 4. Original patch: Reviewed-by: Boaz Harrosh <boaz@xxxxxxxxxxxxxxx> Signed-off-by: Douglas Gilbert <dgilbert@xxxxxxxxxxxx>
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index b6d183a..2e01a9d 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -74,9 +74,10 @@ static void sg_proc_cleanup(void); #define SG_MAX_DEVS 32768 /* SG_MAX_CDB_SIZE should be 260 (spc4r37 section 3.1.30) however the type - * of sg_io_hdr::cmd_len can only represent 255 + * of sg_io_hdr::cmd_len can only represent 255. All SCSI commands greater + * than 16 bytes are "variable length" whose length is a multiple of 4 */ -#define SG_MAX_CDB_SIZE 255 +#define SG_MAX_CDB_SIZE 252 /* * Suppose you want to calculate the formula muldiv(x,m,d)=int(x * m / d)