mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
scsi: qla2xxx: Fix re-using LoopID when handle is in use
commit5c64005364upstream. 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:a084fd68e1("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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
21339e8cf0
commit
0a7a9ed0ce
@@ -1511,25 +1511,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),
|
||||
|
||||
@@ -1203,7 +1203,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);
|
||||
queue_work(sess->vha->hw->wq, &sess->del_work);
|
||||
|
||||
Reference in New Issue
Block a user