diff options
author | Andrew Vasquez <andrew.vasquez@qlogic.com> | 2005-07-09 03:00:36 +0200 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.(none)> | 2005-07-14 17:15:55 +0200 |
commit | 77d74143612c1dab6c055dac21f965929ba0a7e6 (patch) | |
tree | 07a06f60be57487294bdc19df81b66e56ae3ccec /drivers/scsi/qla2xxx/qla_init.c | |
parent | [SCSI] qla2xxx: Consolidate ISP24xx chip reset logic. (diff) | |
download | linux-77d74143612c1dab6c055dac21f965929ba0a7e6.tar.xz linux-77d74143612c1dab6c055dac21f965929ba0a7e6.zip |
[SCSI] qla2xxx: Cleanup FC remote port registration.
Cleanup FC remote port registration.
Due to the inherent behaviour (an immediate scan) of adding
a 'target'-role-capable rport via fc_remote_port_add(),
split the registration into two steps -- addition as
unknown-type role, then use fc_remote_port_rolchg() with
appropriate role (based on PLOGI/PRLI bits). This allows
for a more cleaner rport->dd_data management as can be seen
with the simplified qla2xxx_slave_alloc() function.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_init.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 1a25714e85c6..a6d2559217cd 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -2068,21 +2068,24 @@ qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport) rport_ids.port_id = fcport->d_id.b.domain << 16 | fcport->d_id.b.area << 8 | fcport->d_id.b.al_pa; rport_ids.roles = FC_RPORT_ROLE_UNKNOWN; + fcport->rport = rport = fc_remote_port_add(ha->host, 0, &rport_ids); + if (!rport) { + qla_printk(KERN_WARNING, ha, + "Unable to allocate fc remote port!\n"); + return; + } + rport->dd_data = fcport; + + rport_ids.roles = FC_RPORT_ROLE_UNKNOWN; if (fcport->port_type == FCT_INITIATOR) rport_ids.roles |= FC_RPORT_ROLE_FCP_INITIATOR; if (fcport->port_type == FCT_TARGET) rport_ids.roles |= FC_RPORT_ROLE_FCP_TARGET; - - fcport->rport = rport = fc_remote_port_add(ha->host, 0, &rport_ids); - if (!rport) - qla_printk(KERN_WARNING, ha, - "Unable to allocate fc remote port!\n"); + fc_remote_port_rolechg(rport, rport_ids.roles); if (rport->scsi_target_id != -1 && rport->scsi_target_id < ha->host->max_id) fcport->os_target_id = rport->scsi_target_id; - - rport->dd_data = fcport; } /* |