if (!rport) {
rport = lport->tt.rport_lookup(lport, ids->port_id);
if (!rport) {
- struct fc_disc_port dp;
- dp.lp = lport;
- dp.ids.port_id = ids->port_id;
- dp.ids.port_name = ids->port_name;
- dp.ids.node_name = ids->node_name;
- dp.ids.roles = ids->roles;
- rport = lport->tt.rport_create(&dp);
+ rport = lport->tt.rport_create(lport, ids);
}
if (!rport)
error = -ENOMEM;
size_t plen;
size_t tlen;
int error = 0;
- struct fc_disc_port dp;
+ struct fc_rport_identifiers ids;
struct fc_rport *rport;
struct fc_rport_priv *rdata;
* After the first time through the loop, things return to "normal".
*/
while (plen >= sizeof(*np)) {
- dp.lp = lport;
- dp.ids.port_id = ntoh24(np->fp_fid);
- dp.ids.port_name = ntohll(np->fp_wwpn);
- dp.ids.node_name = -1;
- dp.ids.roles = FC_RPORT_ROLE_UNKNOWN;
-
- if ((dp.ids.port_id != fc_host_port_id(lport->host)) &&
- (dp.ids.port_name != lport->wwpn)) {
- rport = lport->tt.rport_create(&dp);
+ ids.port_id = ntoh24(np->fp_fid);
+ ids.port_name = ntohll(np->fp_wwpn);
+ ids.node_name = -1;
+ ids.roles = FC_RPORT_ROLE_UNKNOWN;
+
+ if (ids.port_id != fc_host_port_id(lport->host) &&
+ ids.port_name != lport->wwpn) {
+ rport = lport->tt.rport_create(lport, &ids);
if (rport) {
rdata = rport->dd_data;
rdata->ops = &fc_disc_rport_ops;
} else
printk(KERN_WARNING "libfc: Failed to allocate "
"memory for the newly discovered port "
- "(%6x)\n", dp.ids.port_id);
+ "(%6x)\n", ids.port_id);
}
if (np->fp_flags & FC_NS_FID_LAST) {
if (dp->ids.port_id == fc_host_port_id(lport->host))
goto out;
- new_rport = lport->tt.rport_create(dp);
+ new_rport = lport->tt.rport_create(lport, &dp->ids);
if (new_rport) {
rdata = new_rport->dd_data;
rdata->ops = &fc_disc_rport_ops;
u32 remote_fid, u64 remote_wwpn,
u64 remote_wwnn)
{
- struct fc_disc_port dp;
+ struct fc_rport_identifiers ids;
- dp.lp = lport;
- dp.ids.port_id = remote_fid;
- dp.ids.port_name = remote_wwpn;
- dp.ids.node_name = remote_wwnn;
- dp.ids.roles = FC_RPORT_ROLE_UNKNOWN;
+ ids.port_id = remote_fid;
+ ids.port_name = remote_wwpn;
+ ids.node_name = remote_wwnn;
+ ids.roles = FC_RPORT_ROLE_UNKNOWN;
if (lport->ptp_rp) {
lport->tt.rport_logoff(lport->ptp_rp);
lport->ptp_rp = NULL;
}
- lport->ptp_rp = lport->tt.rport_create(&dp);
+ lport->ptp_rp = lport->tt.rport_create(lport, &ids);
lport->tt.rport_login(lport->ptp_rp);
{
struct fc_rport *rport;
struct fc_rport_priv *rdata;
- struct fc_disc_port dp;
+ struct fc_rport_identifiers ids;
- dp.ids.port_id = FC_FID_DIR_SERV;
- dp.ids.port_name = -1;
- dp.ids.node_name = -1;
- dp.ids.roles = FC_RPORT_ROLE_UNKNOWN;
- dp.lp = lport;
+ ids.port_id = FC_FID_DIR_SERV;
+ ids.port_name = -1;
+ ids.node_name = -1;
+ ids.roles = FC_RPORT_ROLE_UNKNOWN;
FC_LPORT_DBG(lport, "Entered DNS state from %s state\n",
fc_lport_state(lport));
fc_lport_state_enter(lport, LPORT_ST_DNS);
- rport = lport->tt.rport_create(&dp);
+ rport = lport->tt.rport_create(lport, &ids);
if (!rport)
goto err;
kfree(rport);
}
-struct fc_rport *fc_rport_rogue_create(struct fc_disc_port *dp)
+struct fc_rport *fc_rport_rogue_create(struct fc_lport *lport,
+ struct fc_rport_identifiers *ids)
{
struct fc_rport *rport;
struct fc_rport_priv *rdata;
rdata = RPORT_TO_PRIV(rport);
rport->dd_data = rdata;
- rport->port_id = dp->ids.port_id;
- rport->port_name = dp->ids.port_name;
- rport->node_name = dp->ids.node_name;
- rport->roles = dp->ids.roles;
+ rport->port_id = ids->port_id;
+ rport->port_name = ids->port_name;
+ rport->node_name = ids->node_name;
+ rport->roles = ids->roles;
rport->maxframe_size = FC_MIN_MAX_PAYLOAD;
/*
* Note: all this libfc rogue rport code will be removed for
rport->dev.release = fc_rport_rogue_destroy;
mutex_init(&rdata->rp_mutex);
- rdata->local_port = dp->lp;
+ rdata->local_port = lport;
rdata->trans_state = FC_PORTSTATE_ROGUE;
rdata->rp_state = RPORT_ST_INIT;
rdata->event = RPORT_EV_NONE;
rdata->flags = FC_RP_FLAGS_REC_SUPPORTED;
rdata->ops = NULL;
- rdata->e_d_tov = dp->lp->e_d_tov;
- rdata->r_a_tov = dp->lp->r_a_tov;
+ rdata->e_d_tov = lport->e_d_tov;
+ rdata->r_a_tov = lport->r_a_tov;
INIT_DELAYED_WORK(&rdata->retry_work, fc_rport_timeout);
INIT_WORK(&rdata->event_work, fc_rport_work);
/*
#define RPORT_TO_PRIV(x) \
(struct fc_rport_libfc_priv *)((void *)x + sizeof(struct fc_rport));
-struct fc_rport *fc_rport_rogue_create(struct fc_disc_port *);
-
static inline void fc_rport_set_name(struct fc_rport *rport, u64 wwpn, u64 wwnn)
{
rport->node_name = wwnn;
/*
* Create a remote port
*/
- struct fc_rport *(*rport_create)(struct fc_disc_port *);
+ struct fc_rport *(*rport_create)(struct fc_lport *,
+ struct fc_rport_identifiers *);
/*
* Initiates the RP state machine. It is called from the LP module.