[SCSI] qla2xxx: Add test for valid loop id to qla2x00_relogin().
If fabric device has invalid loop id (FC_NO_LOOP_ID) then call qla2x00_find_new_loop_id() to attempt to obtain valid loop id. Signed-off-by: Joe Carnuccio <joe.carnuccio@qlogic.com> Signed-off-by: Madhuranath Iyengar <Madhu.Iyengar@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
8f7daead3c
commit
03bcfb57c0
|
@ -39,6 +39,8 @@ extern int qla81xx_load_risc(scsi_qla_host_t *, uint32_t *);
|
|||
extern int qla2x00_perform_loop_resync(scsi_qla_host_t *);
|
||||
extern int qla2x00_loop_resync(scsi_qla_host_t *);
|
||||
|
||||
extern int qla2x00_find_new_loop_id(scsi_qla_host_t *, fc_port_t *);
|
||||
|
||||
extern int qla2x00_fabric_login(scsi_qla_host_t *, fc_port_t *, uint16_t *);
|
||||
extern int qla2x00_local_device_login(scsi_qla_host_t *, fc_port_t *);
|
||||
|
||||
|
|
|
@ -35,8 +35,6 @@ static int qla2x00_fabric_dev_login(scsi_qla_host_t *, fc_port_t *,
|
|||
|
||||
static int qla2x00_restart_isp(scsi_qla_host_t *);
|
||||
|
||||
static int qla2x00_find_new_loop_id(scsi_qla_host_t *, fc_port_t *);
|
||||
|
||||
static struct qla_chip_state_84xx *qla84xx_get_chip(struct scsi_qla_host *);
|
||||
static int qla84xx_init_chip(scsi_qla_host_t *);
|
||||
static int qla25xx_init_queues(struct qla_hw_data *);
|
||||
|
@ -3390,7 +3388,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,
|
|||
* Context:
|
||||
* Kernel context.
|
||||
*/
|
||||
static int
|
||||
int
|
||||
qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)
|
||||
{
|
||||
int rval;
|
||||
|
|
|
@ -3214,6 +3214,17 @@ void qla2x00_relogin(struct scsi_qla_host *vha)
|
|||
fcport->d_id.b.area,
|
||||
fcport->d_id.b.al_pa);
|
||||
|
||||
if (fcport->loop_id == FC_NO_LOOP_ID) {
|
||||
fcport->loop_id = next_loopid =
|
||||
ha->min_external_loopid;
|
||||
status = qla2x00_find_new_loop_id(
|
||||
vha, fcport);
|
||||
if (status != QLA_SUCCESS) {
|
||||
/* Ran out of IDs to use */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_ALOGIO_CAPABLE(ha)) {
|
||||
fcport->flags |= FCF_ASYNC_SENT;
|
||||
data[0] = 0;
|
||||
|
|
Loading…
Reference in a new issue