diff options
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_scsih.c')
| -rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_scsih.c | 4 | 
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c index 939f283d0c2..6abd2fcc43e 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c @@ -4258,6 +4258,7 @@ _scsih_io_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)  	u32 log_info;  	struct MPT2SAS_DEVICE *sas_device_priv_data;  	u32 response_code = 0; +	unsigned long flags;  	mpi_reply = mpt2sas_base_get_reply_virt_addr(ioc, reply);  	scmd = _scsih_scsi_lookup_get_clear(ioc, smid); @@ -4282,6 +4283,9 @@ _scsih_io_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)  	 * the failed direct I/O should be redirected to volume  	 */  	if (_scsih_scsi_direct_io_get(ioc, smid)) { +		spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); +		ioc->scsi_lookup[smid - 1].scmd = scmd; +		spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);  		_scsih_scsi_direct_io_set(ioc, smid, 0);  		memcpy(mpi_request->CDB.CDB32, scmd->cmnd, scmd->cmd_len);  		mpi_request->DevHandle =  |