Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6: [SCSI] gdth: fix oops in gdth_copy_cmd() [SCSI] mptsas: Fix oops for insmod during kexec [SCSI] lpfc: avoid double-free during PCI error failure
This commit is contained in:
commit
d459094083
|
@ -815,7 +815,7 @@ mptsas_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
|
||||||
static int
|
static int
|
||||||
mptsas_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
|
mptsas_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
|
||||||
{
|
{
|
||||||
MPT_SCSI_HOST *hd = (MPT_SCSI_HOST *)ioc->sh->hostdata;
|
MPT_SCSI_HOST *hd;
|
||||||
struct mptsas_target_reset_event *target_reset_list, *n;
|
struct mptsas_target_reset_event *target_reset_list, *n;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
@ -827,7 +827,10 @@ mptsas_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
|
||||||
if (reset_phase != MPT_IOC_POST_RESET)
|
if (reset_phase != MPT_IOC_POST_RESET)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!hd || !hd->ioc)
|
if (!ioc->sh || !ioc->sh->hostdata)
|
||||||
|
goto out;
|
||||||
|
hd = (MPT_SCSI_HOST *)ioc->sh->hostdata;
|
||||||
|
if (!hd->ioc)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (list_empty(&hd->target_reset_list))
|
if (list_empty(&hd->target_reset_list))
|
||||||
|
|
|
@ -3091,6 +3091,7 @@ static int gdth_fill_raw_cmd(int hanum,Scsi_Cmnd *scp,unchar b)
|
||||||
cmdp->u.raw64.direction =
|
cmdp->u.raw64.direction =
|
||||||
gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN;
|
gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN;
|
||||||
memcpy(cmdp->u.raw64.cmd,scp->cmnd,16);
|
memcpy(cmdp->u.raw64.cmd,scp->cmnd,16);
|
||||||
|
cmdp->u.raw64.sg_ranz = 0;
|
||||||
} else {
|
} else {
|
||||||
cmdp->u.raw.reserved = 0;
|
cmdp->u.raw.reserved = 0;
|
||||||
cmdp->u.raw.mdisc_time = 0;
|
cmdp->u.raw.mdisc_time = 0;
|
||||||
|
@ -3107,6 +3108,7 @@ static int gdth_fill_raw_cmd(int hanum,Scsi_Cmnd *scp,unchar b)
|
||||||
cmdp->u.raw.direction =
|
cmdp->u.raw.direction =
|
||||||
gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN;
|
gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN;
|
||||||
memcpy(cmdp->u.raw.cmd,scp->cmnd,12);
|
memcpy(cmdp->u.raw.cmd,scp->cmnd,12);
|
||||||
|
cmdp->u.raw.sg_ranz = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scp->use_sg) {
|
if (scp->use_sg) {
|
||||||
|
|
|
@ -1817,10 +1817,9 @@ static pci_ers_result_t lpfc_io_error_detected(struct pci_dev *pdev,
|
||||||
struct lpfc_sli *psli = &phba->sli;
|
struct lpfc_sli *psli = &phba->sli;
|
||||||
struct lpfc_sli_ring *pring;
|
struct lpfc_sli_ring *pring;
|
||||||
|
|
||||||
if (state == pci_channel_io_perm_failure) {
|
if (state == pci_channel_io_perm_failure)
|
||||||
lpfc_pci_remove_one(pdev);
|
|
||||||
return PCI_ERS_RESULT_DISCONNECT;
|
return PCI_ERS_RESULT_DISCONNECT;
|
||||||
}
|
|
||||||
pci_disable_device(pdev);
|
pci_disable_device(pdev);
|
||||||
/*
|
/*
|
||||||
* There may be I/Os dropped by the firmware.
|
* There may be I/Os dropped by the firmware.
|
||||||
|
|
Loading…
Reference in a new issue