rport_ids.port_name = be64_to_cpu(*(uint64_t *)fcport->port_name);
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;
}
/*
static int
qla2xxx_slave_alloc(struct scsi_device *sdev)
{
- scsi_qla_host_t *ha = to_qla_host(sdev->host);
struct fc_rport *rport = starget_to_rport(scsi_target(sdev));
- fc_port_t *fcport;
- int found;
if (!rport)
return -ENXIO;
- found = 0;
- list_for_each_entry(fcport, &ha->fcports, list) {
- if (rport->port_name ==
- be64_to_cpu(*(uint64_t *)fcport->port_name)) {
- found++;
- break;
- }
- }
- if (!found)
- return -ENXIO;
-
- sdev->hostdata = fcport;
+ sdev->hostdata = rport->dd_data;
return 0;
}