diff options
author | Joe Carnuccio <joe.carnuccio@qlogic.com> | 2011-03-30 14:46:27 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2011-05-01 11:10:47 -0400 |
commit | 03bcfb57c098016e318e2672028f93ec072a2333 (patch) | |
tree | c309dfe3c954d7ef50a02b27a9c8edf61b720801 /drivers/scsi/qla2xxx | |
parent | 8f7daead3c7861f9d0caa55269773136ab443b41 (diff) |
[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>
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_gbl.h | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 4 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 11 |
3 files changed, 14 insertions, 3 deletions
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index d009c6fb5008..cd646ca92f8b 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h | |||
@@ -39,6 +39,8 @@ extern int qla81xx_load_risc(scsi_qla_host_t *, uint32_t *); | |||
39 | extern int qla2x00_perform_loop_resync(scsi_qla_host_t *); | 39 | extern int qla2x00_perform_loop_resync(scsi_qla_host_t *); |
40 | extern int qla2x00_loop_resync(scsi_qla_host_t *); | 40 | extern int qla2x00_loop_resync(scsi_qla_host_t *); |
41 | 41 | ||
42 | extern int qla2x00_find_new_loop_id(scsi_qla_host_t *, fc_port_t *); | ||
43 | |||
42 | extern int qla2x00_fabric_login(scsi_qla_host_t *, fc_port_t *, uint16_t *); | 44 | extern int qla2x00_fabric_login(scsi_qla_host_t *, fc_port_t *, uint16_t *); |
43 | extern int qla2x00_local_device_login(scsi_qla_host_t *, fc_port_t *); | 45 | extern int qla2x00_local_device_login(scsi_qla_host_t *, fc_port_t *); |
44 | 46 | ||
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 2c9f47aef229..234c1c28bf44 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
@@ -35,8 +35,6 @@ static int qla2x00_fabric_dev_login(scsi_qla_host_t *, fc_port_t *, | |||
35 | 35 | ||
36 | static int qla2x00_restart_isp(scsi_qla_host_t *); | 36 | static int qla2x00_restart_isp(scsi_qla_host_t *); |
37 | 37 | ||
38 | static int qla2x00_find_new_loop_id(scsi_qla_host_t *, fc_port_t *); | ||
39 | |||
40 | static struct qla_chip_state_84xx *qla84xx_get_chip(struct scsi_qla_host *); | 38 | static struct qla_chip_state_84xx *qla84xx_get_chip(struct scsi_qla_host *); |
41 | static int qla84xx_init_chip(scsi_qla_host_t *); | 39 | static int qla84xx_init_chip(scsi_qla_host_t *); |
42 | static int qla25xx_init_queues(struct qla_hw_data *); | 40 | static int qla25xx_init_queues(struct qla_hw_data *); |
@@ -3390,7 +3388,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha, | |||
3390 | * Context: | 3388 | * Context: |
3391 | * Kernel context. | 3389 | * Kernel context. |
3392 | */ | 3390 | */ |
3393 | static int | 3391 | int |
3394 | qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev) | 3392 | qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev) |
3395 | { | 3393 | { |
3396 | int rval; | 3394 | int rval; |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 2f039e018eef..d1b29dc9cba1 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -3214,6 +3214,17 @@ void qla2x00_relogin(struct scsi_qla_host *vha) | |||
3214 | fcport->d_id.b.area, | 3214 | fcport->d_id.b.area, |
3215 | fcport->d_id.b.al_pa); | 3215 | fcport->d_id.b.al_pa); |
3216 | 3216 | ||
3217 | if (fcport->loop_id == FC_NO_LOOP_ID) { | ||
3218 | fcport->loop_id = next_loopid = | ||
3219 | ha->min_external_loopid; | ||
3220 | status = qla2x00_find_new_loop_id( | ||
3221 | vha, fcport); | ||
3222 | if (status != QLA_SUCCESS) { | ||
3223 | /* Ran out of IDs to use */ | ||
3224 | break; | ||
3225 | } | ||
3226 | } | ||
3227 | |||
3217 | if (IS_ALOGIO_CAPABLE(ha)) { | 3228 | if (IS_ALOGIO_CAPABLE(ha)) { |
3218 | fcport->flags |= FCF_ASYNC_SENT; | 3229 | fcport->flags |= FCF_ASYNC_SENT; |
3219 | data[0] = 0; | 3230 | data[0] = 0; |