Skip to content

Commit 6ab35c0

Browse files
Martin PetermannJames Bottomley
authored andcommitted
[SCSI] zfcp: Fix port reference counting
If this problem appears zfcp ports cannot be de-queued since it is checked for a zero refcount. The port reference counting is wrong for existing zfcp ports when e.g. an adapter gets on-line again. During port scanning the reference counting for existing ports should not be changed. Signed-off-by: Martin Petermann <[email protected]> Signed-off-by: Christof Schmitt <[email protected]> Signed-off-by: James Bottomley <[email protected]>
1 parent 7001f0c commit 6ab35c0

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

drivers/s390/scsi/zfcp_fc.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,9 @@ static void zfcp_validate_port(struct zfcp_port *port)
539539
{
540540
struct zfcp_adapter *adapter = port->adapter;
541541

542+
if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_NOESC))
543+
return;
544+
542545
atomic_clear_mask(ZFCP_STATUS_COMMON_NOESC, &port->status);
543546

544547
if ((port->supported_classes != 0) ||
@@ -599,10 +602,8 @@ static int zfcp_scan_eval_gpn_ft(struct zfcp_gpn_ft *gpn_ft, int max_entries)
599602
if (acc->wwpn == fc_host_port_name(adapter->scsi_host))
600603
continue;
601604
port = zfcp_get_port_by_wwpn(adapter, acc->wwpn);
602-
if (port) {
603-
zfcp_port_get(port);
605+
if (port)
604606
continue;
605-
}
606607

607608
port = zfcp_port_enqueue(adapter, acc->wwpn,
608609
ZFCP_STATUS_COMMON_NOESC, d_id);

0 commit comments

Comments
 (0)