Skip to content

Commit

Permalink
[SCSI] libfc: change to make remote port callback optional
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Joe Eykholt authored and James Bottomley committed Sep 10, 2009
1 parent 19f97e3 commit 8345592
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 44 deletions.
45 changes: 3 additions & 42 deletions drivers/scsi/libfc/fc_disc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
Expand Down
4 changes: 2 additions & 2 deletions drivers/scsi/libfc/fc_rport.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand All @@ -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);
}
Expand Down

0 comments on commit 8345592

Please sign in to comment.