]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
scsi: qla2xxx: Fix re-using LoopID when handle is in use
authorQuinn Tran <quinn.tran@cavium.com>
Thu, 27 Sep 2018 05:05:14 +0000 (22:05 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 28 Sep 2018 00:15:05 +0000 (20:15 -0400)
This patch fixes issue where driver clears NPort ID map instead of marking
handle in use. Once driver clears NPort ID from the database, it can reuse
the same NPort ID resulting in a PLOGI failure.

[mkp: fixed Himanshu's SoB]

Fixes: a084fd68e1d2 ("scsi: qla2xxx: Fix re-login for Nport Handle in use")
Cc: <stable@vger.kernel.org>
Signed-of-by: Quinn Tran <quinn.tran@cavium.com>
Reviewed-by: Ewan D. Milne <emilne@redhat.com>
Signed-off-by: Himanshu Madhani <hmadhani@cavium.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_target.c

index 41e5358d3739dbba04c7acc80a8388f8572509d0..ae28586c8ef2dbf3e3bb25741ceae45de3c60728 100644 (file)
@@ -2017,25 +2017,15 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
                cid.b.rsvd_1 = 0;
 
                ql_dbg(ql_dbg_disc, vha, 0x20ec,
-                   "%s %d %8phC LoopID 0x%x in use post gnl\n",
+                   "%s %d %8phC lid %#x in use with pid %06x post gnl\n",
                    __func__, __LINE__, ea->fcport->port_name,
-                   ea->fcport->loop_id);
+                   ea->fcport->loop_id, cid.b24);
 
-               if (IS_SW_RESV_ADDR(cid)) {
-                       set_bit(ea->fcport->loop_id, vha->hw->loop_id_map);
-                       ea->fcport->loop_id = FC_NO_LOOP_ID;
-               } else {
-                       qla2x00_clear_loop_id(ea->fcport);
-               }
+               set_bit(ea->fcport->loop_id, vha->hw->loop_id_map);
+               ea->fcport->loop_id = FC_NO_LOOP_ID;
                qla24xx_post_gnl_work(vha, ea->fcport);
                break;
        case MBS_PORT_ID_USED:
-               ql_dbg(ql_dbg_disc, vha, 0x20ed,
-                   "%s %d %8phC NPortId %02x%02x%02x inuse post gidpn\n",
-                   __func__, __LINE__, ea->fcport->port_name,
-                   ea->fcport->d_id.b.domain, ea->fcport->d_id.b.area,
-                   ea->fcport->d_id.b.al_pa);
-
                lid = ea->iop[1] & 0xffff;
                qlt_find_sess_invalidate_other(vha,
                    wwn_to_u64(ea->fcport->port_name),
index a69ec4519d81d097fcc89be13ee92e03123a70e6..3015f1bbcf1a0e2b5dc4ddc7a8ed5661c61e69ca 100644 (file)
@@ -1273,7 +1273,8 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess)
        qla24xx_chk_fcp_state(sess);
 
        ql_dbg(ql_dbg_tgt, sess->vha, 0xe001,
-           "Scheduling sess %p for deletion\n", sess);
+           "Scheduling sess %p for deletion %8phC\n",
+           sess, sess->port_name);
 
        INIT_WORK(&sess->del_work, qla24xx_delete_sess_fn);
        WARN_ON(!queue_work(sess->vha->hw->wq, &sess->del_work));