Commit 5c640053 authored by Quinn Tran's avatar Quinn Tran Committed by Martin K. Petersen

scsi: qla2xxx: Fix re-using LoopID when handle is in use

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: a084fd68 ("scsi: qla2xxx: Fix re-login for Nport Handle in use")
Cc: <stable@vger.kernel.org>
Signed-of-by: default avatarQuinn Tran <quinn.tran@cavium.com>
Reviewed-by: default avatarEwan D. Milne <emilne@redhat.com>
Signed-off-by: default avatarHimanshu Madhani <hmadhani@cavium.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 732ee9a9
...@@ -2017,25 +2017,15 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea) ...@@ -2017,25 +2017,15 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea)
cid.b.rsvd_1 = 0; cid.b.rsvd_1 = 0;
ql_dbg(ql_dbg_disc, vha, 0x20ec, 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, __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); set_bit(ea->fcport->loop_id, vha->hw->loop_id_map);
ea->fcport->loop_id = FC_NO_LOOP_ID; ea->fcport->loop_id = FC_NO_LOOP_ID;
} else {
qla2x00_clear_loop_id(ea->fcport);
}
qla24xx_post_gnl_work(vha, ea->fcport); qla24xx_post_gnl_work(vha, ea->fcport);
break; break;
case MBS_PORT_ID_USED: 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; lid = ea->iop[1] & 0xffff;
qlt_find_sess_invalidate_other(vha, qlt_find_sess_invalidate_other(vha,
wwn_to_u64(ea->fcport->port_name), wwn_to_u64(ea->fcport->port_name),
......
...@@ -1273,7 +1273,8 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess) ...@@ -1273,7 +1273,8 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess)
qla24xx_chk_fcp_state(sess); qla24xx_chk_fcp_state(sess);
ql_dbg(ql_dbg_tgt, sess->vha, 0xe001, 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); INIT_WORK(&sess->del_work, qla24xx_delete_sess_fn);
WARN_ON(!queue_work(sess->vha->hw->wq, &sess->del_work)); WARN_ON(!queue_work(sess->vha->hw->wq, &sess->del_work));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment