diff options
author | Andrew Vasquez <andrew.vasquez@qlogic.com> | 2005-07-08 21:00:36 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.(none)> | 2005-07-14 11:15:55 -0400 |
commit | 77d74143612c1dab6c055dac21f965929ba0a7e6 (patch) | |
tree | 07a06f60be57487294bdc19df81b66e56ae3ccec /drivers/scsi/qla2xxx/qla_init.c | |
parent | 88c2666351f41a7d4459e79594f687a356f5e57c (diff) |
[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) | |||
2068 | rport_ids.port_id = fcport->d_id.b.domain << 16 | | 2068 | rport_ids.port_id = fcport->d_id.b.domain << 16 | |
2069 | fcport->d_id.b.area << 8 | fcport->d_id.b.al_pa; | 2069 | fcport->d_id.b.area << 8 | fcport->d_id.b.al_pa; |
2070 | rport_ids.roles = FC_RPORT_ROLE_UNKNOWN; | 2070 | rport_ids.roles = FC_RPORT_ROLE_UNKNOWN; |
2071 | fcport->rport = rport = fc_remote_port_add(ha->host, 0, &rport_ids); | ||
2072 | if (!rport) { | ||
2073 | qla_printk(KERN_WARNING, ha, | ||
2074 | "Unable to allocate fc remote port!\n"); | ||
2075 | return; | ||
2076 | } | ||
2077 | rport->dd_data = fcport; | ||
2078 | |||
2079 | rport_ids.roles = FC_RPORT_ROLE_UNKNOWN; | ||
2071 | if (fcport->port_type == FCT_INITIATOR) | 2080 | if (fcport->port_type == FCT_INITIATOR) |
2072 | rport_ids.roles |= FC_RPORT_ROLE_FCP_INITIATOR; | 2081 | rport_ids.roles |= FC_RPORT_ROLE_FCP_INITIATOR; |
2073 | if (fcport->port_type == FCT_TARGET) | 2082 | if (fcport->port_type == FCT_TARGET) |
2074 | rport_ids.roles |= FC_RPORT_ROLE_FCP_TARGET; | 2083 | rport_ids.roles |= FC_RPORT_ROLE_FCP_TARGET; |
2075 | 2084 | fc_remote_port_rolechg(rport, rport_ids.roles); | |
2076 | fcport->rport = rport = fc_remote_port_add(ha->host, 0, &rport_ids); | ||
2077 | if (!rport) | ||
2078 | qla_printk(KERN_WARNING, ha, | ||
2079 | "Unable to allocate fc remote port!\n"); | ||
2080 | 2085 | ||
2081 | if (rport->scsi_target_id != -1 && | 2086 | if (rport->scsi_target_id != -1 && |
2082 | rport->scsi_target_id < ha->host->max_id) | 2087 | rport->scsi_target_id < ha->host->max_id) |
2083 | fcport->os_target_id = rport->scsi_target_id; | 2088 | fcport->os_target_id = rport->scsi_target_id; |
2084 | |||
2085 | rport->dd_data = fcport; | ||
2086 | } | 2089 | } |
2087 | 2090 | ||
2088 | /* | 2091 | /* |