提交 8345592b 编写于 作者: J Joe Eykholt 提交者: James Bottomley

[SCSI] libfc: change to make remote port callback optional

Since the rport list maintenance is now done in the rport module,
the callback (and ops) are usually not necessary.

Allow rdata->ops to be left NULL if nothing needs
to be done in an event callback.
Signed-off-by: NJoe Eykholt <jeykholt@cisco.com>
Signed-off-by: NRobert Love <robert.w.love@intel.com>
Signed-off-by: NJames Bottomley <James.Bottomley@suse.de>
上级 19f97e3c
......@@ -91,37 +91,6 @@ void fc_disc_stop_rports(struct fc_disc *disc)
mutex_unlock(&disc->disc_mutex);
}
/**
* fc_disc_rport_callback() - Event handler for rport events
* @lport: The lport which is receiving the event
* @rdata: private remote port data
* @event: The event that occured
*
* Locking Note: The rport lock should not be held when calling
* this function.
*/
static void fc_disc_rport_callback(struct fc_lport *lport,
struct fc_rport_priv *rdata,
enum fc_rport_event event)
{
struct fc_disc *disc = &lport->disc;
FC_DISC_DBG(disc, "Received a %d event for port (%6x)\n", event,
rdata->ids.port_id);
switch (event) {
case RPORT_EV_READY:
break;
case RPORT_EV_LOGO:
case RPORT_EV_FAILED:
case RPORT_EV_STOP:
break;
default:
break;
}
}
/**
* fc_disc_recv_rscn_req() - Handle Registered State Change Notification (RSCN)
* @sp: Current sequence of the RSCN exchange
......@@ -334,10 +303,6 @@ static void fc_disc_start(void (*disc_callback)(struct fc_lport *,
mutex_unlock(&disc->disc_mutex);
}
static struct fc_rport_operations fc_disc_rport_ops = {
.event_callback = fc_disc_rport_callback,
};
/**
* fc_disc_new_target() - Handle new target found by discovery
* @lport: FC local port
......@@ -381,10 +346,8 @@ static int fc_disc_new_target(struct fc_disc *disc,
if (!rdata)
error = -ENOMEM;
}
if (rdata) {
rdata->ops = &fc_disc_rport_ops;
if (rdata)
lport->tt.rport_login(rdata);
}
}
return error;
}
......@@ -551,10 +514,9 @@ static int fc_disc_gpn_ft_parse(struct fc_disc *disc, void *buf, size_t len)
if (ids.port_id != fc_host_port_id(lport->host) &&
ids.port_name != lport->wwpn) {
rdata = lport->tt.rport_create(lport, &ids);
if (rdata) {
rdata->ops = &fc_disc_rport_ops;
if (rdata)
lport->tt.rport_login(rdata);
} else
else
printk(KERN_WARNING "libfc: Failed to allocate "
"memory for the newly discovered port "
"(%6x)\n", ids.port_id);
......@@ -697,7 +659,6 @@ static void fc_disc_single(struct fc_disc *disc, struct fc_disc_port *dp)
rdata = lport->tt.rport_create(lport, &dp->ids);
if (rdata) {
rdata->ops = &fc_disc_rport_ops;
kfree(dp);
lport->tt.rport_login(rdata);
}
......
......@@ -250,7 +250,7 @@ static void fc_rport_work(struct work_struct *work)
rp->r_a_tov = rdata->r_a_tov;
mutex_unlock(&rdata->rp_mutex);
if (rport_ops->event_callback) {
if (rport_ops && rport_ops->event_callback) {
FC_RPORT_DBG(rdata, "callback ev %d\n", event);
rport_ops->event_callback(lport, rdata, event);
}
......@@ -269,7 +269,7 @@ static void fc_rport_work(struct work_struct *work)
mutex_unlock(&lport->disc.disc_mutex);
}
if (rport_ops->event_callback) {
if (rport_ops && rport_ops->event_callback) {
FC_RPORT_DBG(rdata, "callback ev %d\n", event);
rport_ops->event_callback(lport, rdata, event);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册