[SCSI] isci: fix breakage caused by >16byte CDB patch
authorJames Bottomley <JBottomley@Parallels.com>
Wed, 24 Jul 2013 19:43:18 +0000 (12:43 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Wed, 24 Jul 2013 21:18:12 +0000 (14:18 -0700)
Oops, apparently no-one I cc'd at intel actually bothered to check this
patch for the isci driver:

commit e73823f7a2c921dcf068d34ea03bd682498d9e42
Author: James Bottomley <JBottomley@Parallels.com>
Date:   Tue May 7 15:38:18 2013 -0700

    [SCSI] libsas: implement > 16 byte CDB support

sci_swab32_cpy needs multiples of four, so for commands that aren't that, it's
rounding the wrong way.  fix by doing (len+3)/4 instead of len/4.

Reported-by: Tony Luck <tony.luck@intel.com>
Tested-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/isci/request.c

index 7b082157eb79668b5fa6bcda0b16d6df25cd6acb..99d2930b18c80e319d3c506244c80b6205bab17e 100644 (file)
@@ -185,7 +185,7 @@ static void sci_io_request_build_ssp_command_iu(struct isci_request *ireq)
        cmd_iu->_r_c = 0;
 
        sci_swab32_cpy(&cmd_iu->cdb, task->ssp_task.cmd->cmnd,
        cmd_iu->_r_c = 0;
 
        sci_swab32_cpy(&cmd_iu->cdb, task->ssp_task.cmd->cmnd,
-                      task->ssp_task.cmd->cmd_len / sizeof(u32));
+                      (task->ssp_task.cmd->cmd_len+3) / sizeof(u32));
 }
 
 static void sci_task_request_build_ssp_task_iu(struct isci_request *ireq)
 }
 
 static void sci_task_request_build_ssp_task_iu(struct isci_request *ireq)