diff options
author | Joe Eykholt <jeykholt@cisco.com> | 2009-08-25 21:02:01 (GMT) |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-09-10 17:07:47 (GMT) |
commit | 8345592b8388b51e0f52f63e94a5a5d3f07fda9a (patch) | |
tree | c1552168982507bc331a3163a62106c649179941 /drivers/scsi/libfc | |
parent | 19f97e3c0acc5eb03486044f5428395b7690a01a (diff) | |
download | linux-8345592b8388b51e0f52f63e94a5a5d3f07fda9a.tar.xz |
[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: Joe Eykholt <jeykholt@cisco.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/libfc')
-rw-r--r-- | drivers/scsi/libfc/fc_disc.c | 45 | ||||
-rw-r--r-- | drivers/scsi/libfc/fc_rport.c | 4 |
2 files changed, 5 insertions, 44 deletions
diff --git a/drivers/scsi/libfc/fc_disc.c b/drivers/scsi/libfc/fc_disc.c index 266aa1e..3fcbba1 100644 --- a/drivers/scsi/libfc/fc_disc.c +++ b/drivers/scsi/libfc/fc_disc.c @@ -92,37 +92,6 @@ void fc_disc_stop_rports(struct fc_disc *disc) } /** - * 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 * @fp: RSCN Frame @@ -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); } diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c index 29bb6fd..406049c 100644 --- a/drivers/scsi/libfc/fc_rport.c +++ b/drivers/scsi/libfc/fc_rport.c @@ -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); } |