Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f091fb8c authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Martin K. Petersen
Browse files

scsi: scsi_transport_fc: Also check for NOTPRESENT in fc_remote_port_add()



During failover there is a small race window between fc_remote_port_add()
and fc_timeout_deleted_rport(); the latter drops the lock after setting the
port to NOTPRESENT, so if fc_remote_port_add() is called right at that time
it will fail to detect the existing rport and happily adding a new
structure, causing rports to get registered twice.

Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 675195d0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2739,7 +2739,8 @@ fc_remote_port_add(struct Scsi_Host *shost, int channel,

	list_for_each_entry(rport, &fc_host->rports, peers) {

		if ((rport->port_state == FC_PORTSTATE_BLOCKED) &&
		if ((rport->port_state == FC_PORTSTATE_BLOCKED ||
		     rport->port_state == FC_PORTSTATE_NOTPRESENT) &&
			(rport->channel == channel)) {

			switch (fc_host->tgtid_bind_type) {