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_os.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_os.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 16 |
1 files changed, 1 insertions, 15 deletions
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index d726f48728ec..9000659bfbcf 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -1071,26 +1071,12 @@ qla2x00_device_reset(scsi_qla_host_t *ha, fc_port_t *reset_fcport) | |||
1071 | static int | 1071 | static int |
1072 | qla2xxx_slave_alloc(struct scsi_device *sdev) | 1072 | qla2xxx_slave_alloc(struct scsi_device *sdev) |
1073 | { | 1073 | { |
1074 | scsi_qla_host_t *ha = to_qla_host(sdev->host); | ||
1075 | struct fc_rport *rport = starget_to_rport(scsi_target(sdev)); | 1074 | struct fc_rport *rport = starget_to_rport(scsi_target(sdev)); |
1076 | fc_port_t *fcport; | ||
1077 | int found; | ||
1078 | 1075 | ||
1079 | if (!rport) | 1076 | if (!rport) |
1080 | return -ENXIO; | 1077 | return -ENXIO; |
1081 | 1078 | ||
1082 | found = 0; | 1079 | sdev->hostdata = rport->dd_data; |
1083 | list_for_each_entry(fcport, &ha->fcports, list) { | ||
1084 | if (rport->port_name == | ||
1085 | be64_to_cpu(*(uint64_t *)fcport->port_name)) { | ||
1086 | found++; | ||
1087 | break; | ||
1088 | } | ||
1089 | } | ||
1090 | if (!found) | ||
1091 | return -ENXIO; | ||
1092 | |||
1093 | sdev->hostdata = fcport; | ||
1094 | 1080 | ||
1095 | return 0; | 1081 | return 0; |
1096 | } | 1082 | } |