[SCSI] mptspi: fix oops in mptspi_dv_renegotiate_work()
The problem here is that if the ioc faults too early in the bring up sequence (as it usually does for an irq routing problem), ioc_reset gets called before the scsi host is even allocated. This causes an oops when it later schedules a renegotiation. Fix this by checking ioc->sh before trying to renegotiate. Cc: "Moore, Eric" <Eric.Moore@lsi.com> Cc: Stable Tree <stable@kernel.org> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
bdb2b8cab4
commit
081a5bcb39
|
@ -1266,13 +1266,18 @@ mptspi_dv_renegotiate(struct _MPT_SCSI_HOST *hd)
|
|||
static int
|
||||
mptspi_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
|
||||
{
|
||||
struct _MPT_SCSI_HOST *hd = shost_priv(ioc->sh);
|
||||
int rc;
|
||||
|
||||
rc = mptscsih_ioc_reset(ioc, reset_phase);
|
||||
|
||||
if (reset_phase == MPT_IOC_POST_RESET)
|
||||
/* only try to do a renegotiation if we're properly set up
|
||||
* if we get an ioc fault on bringup, ioc->sh will be NULL */
|
||||
if (reset_phase == MPT_IOC_POST_RESET &&
|
||||
ioc->sh) {
|
||||
struct _MPT_SCSI_HOST *hd = shost_priv(ioc->sh);
|
||||
|
||||
mptspi_dv_renegotiate(hd);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue