mpt2sas: WarpDrive Infinite command retries due to wrong scsi command entry in MPI message
PATCH 1/1 mpt2sas: WarpDrive Infinite command retries due to wrong scsi command entry in MPI message
Issue:
This issue is seen on LSI H/W WarpDrive SSS6200
When filed direct I/O is tried as volume I/O the scmd field in internal lookup table get cleared and because of that the retried volume I/O never gets reported as completed to SML.
Result:
I/O timeout and Error handling thread will kicking off
Fix: Setting back the scmd in the lookup table before retrying the failed
direct i/o
Signed-off-by Kashyap Desai <[email protected]>
---
drivers/scsi/mpt2sas/mpt2sas_scsih.c +4 -0
@@ -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 =