Commit b98214f6 authored by Dick Kennedy's avatar Dick Kennedy Committed by Martin K. Petersen
Browse files

scsi: lpfc: Remove re-binding of nvme rport during registration

The lldd rebinds the ndlp with rport during a nvme rport registration (via
nvme_fc_register_remoteport). If rport & ndlp pointers are same as the
previous one, the lldd will re-use the ndlp and rport association without
re-initialization. This assumption is incorrect. The lldd should be
ignorant of whether the returned rport pointer is new or not, and should
always assume it is new.

Remove the re-binding code, always assumes that rport pointer received from
transport is a new pointer.

Link: https://lore.kernel.org/r/20200501214310.91713-4-jsmart2021@gmail.com


Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 164ba8d2
Loading
Loading
Loading
Loading
+0 −32
Original line number Diff line number Diff line
@@ -2321,38 +2321,6 @@ lpfc_nvme_register_port(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
		spin_unlock_irq(&vport->phba->hbalock);
		rport = remote_port->private;
		if (oldrport) {
			/* New remoteport record does not guarantee valid
			 * host private memory area.
			 */
			if (oldrport == remote_port->private) {
				/* Same remoteport - ndlp should match.
				 * Just reuse.
				 */
				lpfc_printf_vlog(ndlp->vport, KERN_INFO,
						 LOG_NVME_DISC,
						 "6014 Rebind lport to current "
						 "remoteport x%px wwpn 0x%llx, "
						 "Data: x%x x%x x%px x%px x%x "
						 " x%06x\n",
						 remote_port,
						 remote_port->port_name,
						 remote_port->port_id,
						 remote_port->port_role,
						 oldrport->ndlp,
						 ndlp,
						 ndlp->nlp_type,
						 ndlp->nlp_DID);

				/* It's a complete rebind only if the driver
				 * is registering with the same ndlp. Otherwise
				 * the driver likely executed a node swap
				 * prior to this registration and the ndlp to
				 * remoteport binding needs to be redone.
				 */
				if (prev_ndlp == ndlp)
					return 0;

			}

			/* Sever the ndlp<->rport association
			 * before dropping the ndlp ref from