mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-11 13:52:02 -04:00
scsi: lpfc: Check devloss callbk done flag for potential stale NDLP ptrs
Should an rport remain in the NOTPRESENT state it is possible that stgt_delete_work is scheduled after dev_loss_tmo_callbk. In such cases, dev_loss_tmo_callbk would have cleaned up the NDLP object resulting in stale ndlp pointers in lpfc_terminate_rport_io(). Check for the DEVLOSS_CALLBK_DONE flag to know if dev_loss_tmo_callbk has been called. This is a more reliable way to avoid dereferencing stale NDLP pointers. Signed-off-by: Justin Tee <justin.tee@broadcom.com> Link: https://lore.kernel.org/r/20241031223219.152342-3-justintee8345@gmail.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
29a64210c7
commit
4c113ac05b
@@ -100,6 +100,12 @@ lpfc_rport_invalid(struct fc_rport *rport)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (rport->flags & FC_RPORT_DEVLOSS_CALLBK_DONE) {
|
||||
pr_info("**** %s: devloss_callbk_done rport x%px SID x%x\n",
|
||||
__func__, rport, rport->scsi_target_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
rdata = rport->dd_data;
|
||||
if (!rdata) {
|
||||
pr_err("**** %s: NULL dd_data on rport x%px SID x%x\n",
|
||||
|
||||
Reference in New Issue
Block a user