diff
 struct lpfc_vport {
 	...
+	bool host_removed;
 };

 int lpfc_vport_delete(struct fc_vport *fc_vport)
 {
 	...
 	fc_remove_host(shost);
 	scsi_remove_host(shost);
+	vport->host_removed = true;
 	ndlp = lpfc_findnode_did(vport, Fabric_DID);
 	...
 }

 struct lpfc_nodelist *
 lpfc_findnode_did(struct lpfc_vport *vport, uint32_t did)
 {
 	struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
 	struct lpfc_nodelist *ndlp;
 	unsigned long iflags;
 
+	if (vport->host_removed) {
+		return NULL;
+	}
 	spin_lock_irqsave(shost->host_lock, iflags);
 	ndlp = __lpfc_findnode_did(vport, did);
 	spin_unlock_irqrestore(shost->host_lock, iflags);
 	return ndlp;
 }
