qla2xxx: fix race in handling rport deletion during recovery causes panic
authorLaurence Oberman <loberman@redhat.com>
Tue, 25 Nov 2014 14:16:42 +0000 (09:16 -0500)
committerChristoph Hellwig <hch@lst.de>
Mon, 15 Dec 2014 12:34:23 +0000 (13:34 +0100)
When we have an rport disconnect we race during rport deletion and
re-connection resulting in a panic.  When we do this, we call
fc_remote_port_del() just before we do the calls to re-establish the
session with the FC transport with fc_remote_port_add() and then
fc_remote_port_rolechg().

If we remove the call to fc_remote_port_del() before re-establishing
the connection this prevents the race.  This patch has resolved this
for multiple customers via test kernels.

Suggested by Chad Dupuis, implemented and tested by Laurence Oberman.

Signed-off-by: Laurence Oberman <loberman@redhat.com>
Acked-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/qla2xxx/qla_init.c

index a4dde7e..e59f25b 100644 (file)
@@ -3237,8 +3237,6 @@ qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport)
        struct fc_rport *rport;
        unsigned long flags;
 
-       qla2x00_rport_del(fcport);
-
        rport_ids.node_name = wwn_to_u64(fcport->node_name);
        rport_ids.port_name = wwn_to_u64(fcport->port_name);
        rport_ids.port_id = fcport->d_id.b.domain << 16 |