mirror of
https://github.com/torvalds/linux.git
synced 2024-12-18 09:02:17 +00:00
scsi: lpfc: Fix oops when unloading driver while running mds diags
While mds diagnostic tests are running, if the driver is requested to be unloaded, oops or hangs are observed. The driver doesn't terminate the processing of diag frames when the unload is started. As such: oops may be seen for __lpfc_sli_release_iocbq_s4 because ring memory is referenced that was already freed; or hangs see in lpfc_nvme_wait_for_io_drain as ios no longer complete. If unloading, don't process diag frames. Just clean them up. Link: https://lore.kernel.org/r/20200803210229.23063-5-jsmart2021@gmail.com Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
8ccd6926db
commit
24411fcd6f
@ -13650,7 +13650,11 @@ lpfc_sli4_sp_handle_rcqe(struct lpfc_hba *phba, struct lpfc_rcqe *rcqe)
|
||||
fc_hdr->fh_r_ctl == FC_RCTL_DD_UNSOL_DATA) {
|
||||
spin_unlock_irqrestore(&phba->hbalock, iflags);
|
||||
/* Handle MDS Loopback frames */
|
||||
lpfc_sli4_handle_mds_loopback(phba->pport, dma_buf);
|
||||
if (!(phba->pport->load_flag & FC_UNLOADING))
|
||||
lpfc_sli4_handle_mds_loopback(phba->pport,
|
||||
dma_buf);
|
||||
else
|
||||
lpfc_in_buf_free(phba, &dma_buf->dbuf);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -18363,7 +18367,10 @@ lpfc_sli4_handle_received_buffer(struct lpfc_hba *phba,
|
||||
fc_hdr->fh_r_ctl == FC_RCTL_DD_UNSOL_DATA) {
|
||||
vport = phba->pport;
|
||||
/* Handle MDS Loopback frames */
|
||||
lpfc_sli4_handle_mds_loopback(vport, dmabuf);
|
||||
if (!(phba->pport->load_flag & FC_UNLOADING))
|
||||
lpfc_sli4_handle_mds_loopback(vport, dmabuf);
|
||||
else
|
||||
lpfc_in_buf_free(phba, &dmabuf->dbuf);
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user