[SCSI] add support for variable length extended commands
Add support for variable-length, extended, and vendor specific CDBs to scsi-ml. It is now possible for initiators and ULD's to issue these types of commands. LLDs need not change much. All they need is to raise the .max_cmd_len to the longest command they support (see iscsi patch). - clean-up some code paths that did not expect commands to be larger than 16, and change cmd_len members' type to short as char is not enough. Signed-off-by: Boaz Harrosh <bharrosh@panasas.com> Signed-off-by: Benny Halevy <bhalevy@panasas.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
committed by
James Bottomley
parent
64a87b244b
commit
db4742dd8f
@@ -78,15 +78,6 @@ static void scsi_done(struct scsi_cmnd *cmd);
|
||||
/* Do not call reset on error if we just did a reset within 15 sec. */
|
||||
#define MIN_RESET_PERIOD (15*HZ)
|
||||
|
||||
/*
|
||||
* Macro to determine the size of SCSI command. This macro takes vendor
|
||||
* unique commands into account. SCSI commands in groups 6 and 7 are
|
||||
* vendor unique and we will depend upon the command length being
|
||||
* supplied correctly in cmd_len.
|
||||
*/
|
||||
#define CDB_SIZE(cmd) (((((cmd)->cmnd[0] >> 5) & 7) < 6) ? \
|
||||
COMMAND_SIZE((cmd)->cmnd[0]) : (cmd)->cmd_len)
|
||||
|
||||
/*
|
||||
* Note - the initial logging level can be set here to log events at boot time.
|
||||
* After the system is up, you may enable logging via the /proc interface.
|
||||
@@ -709,9 +700,11 @@ int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
|
||||
* Before we queue this command, check if the command
|
||||
* length exceeds what the host adapter can handle.
|
||||
*/
|
||||
if (CDB_SIZE(cmd) > cmd->device->host->max_cmd_len) {
|
||||
if (cmd->cmd_len > cmd->device->host->max_cmd_len) {
|
||||
SCSI_LOG_MLQUEUE(3,
|
||||
printk("queuecommand : command too long.\n"));
|
||||
printk("queuecommand : command too long. "
|
||||
"cdb_size=%d host->max_cmd_len=%d\n",
|
||||
cmd->cmd_len, cmd->device->host->max_cmd_len));
|
||||
cmd->result = (DID_ABORT << 16);
|
||||
|
||||
scsi_done(cmd);
|
||||
|
Reference in New Issue
Block a user