Skip to content

Commit

Permalink
[SCSI] fcoe: add a separate scsi transport template for NPIV vports
Browse files Browse the repository at this point in the history
Right now it's exactly the same as the physical port template,
and there is no way to create a port on anything other than the
netdev.  When the vport_create entry point gets hooked up it will
create lports on top of vport devices, which will use this.

Rename scsi_transport_fcoe_sw to fcoe_transport_template to be more
clear with naming now that there are two templates.

Signed-off-by: Chris Leech <christopher.leech@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
  • Loading branch information
Chris Leech authored and James Bottomley committed Dec 4, 2009
1 parent 11b5618 commit e9084bb
Showing 1 changed file with 47 additions and 7 deletions.
54 changes: 47 additions & 7 deletions drivers/scsi/fcoe/fcoe.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,8 @@ static struct notifier_block fcoe_notifier = {
.notifier_call = fcoe_device_notification,
};

static struct scsi_transport_template *scsi_transport_fcoe_sw;
static struct scsi_transport_template *fcoe_transport_template;
static struct scsi_transport_template *fcoe_vport_transport_template;

struct fc_function_template fcoe_transport_function = {
.show_host_node_name = 1,
Expand Down Expand Up @@ -125,6 +126,39 @@ struct fc_function_template fcoe_transport_function = {
.terminate_rport_io = fc_rport_terminate_io,
};

struct fc_function_template fcoe_vport_transport_function = {
.show_host_node_name = 1,
.show_host_port_name = 1,
.show_host_supported_classes = 1,
.show_host_supported_fc4s = 1,
.show_host_active_fc4s = 1,
.show_host_maxframe_size = 1,

.show_host_port_id = 1,
.show_host_supported_speeds = 1,
.get_host_speed = fc_get_host_speed,
.show_host_speed = 1,
.show_host_port_type = 1,
.get_host_port_state = fc_get_host_port_state,
.show_host_port_state = 1,
.show_host_symbolic_name = 1,

.dd_fcrport_size = sizeof(struct fc_rport_libfc_priv),
.show_rport_maxframe_size = 1,
.show_rport_supported_classes = 1,

.show_host_fabric_name = 1,
.show_starget_node_name = 1,
.show_starget_port_name = 1,
.show_starget_port_id = 1,
.set_rport_dev_loss_tmo = fc_set_rport_loss_tmo,
.show_rport_dev_loss_tmo = 1,
.get_fc_host_stats = fc_get_host_stats,
.issue_fc_host_lip = fcoe_reset,

.terminate_rport_io = fc_rport_terminate_io,
};

static struct scsi_host_template fcoe_shost_template = {
.module = THIS_MODULE,
.name = "FCoE Driver",
Expand Down Expand Up @@ -530,7 +564,10 @@ static int fcoe_shost_config(struct fc_lport *lp, struct Scsi_Host *shost,
lp->host->max_lun = FCOE_MAX_LUN;
lp->host->max_id = FCOE_MAX_FCP_TARGET;
lp->host->max_channel = 0;
lp->host->transportt = scsi_transport_fcoe_sw;
if (lp->vport)
lp->host->transportt = fcoe_vport_transport_template;
else
lp->host->transportt = fcoe_transport_template;

/* add the new host to the SCSI-ml */
rc = scsi_add_host(lp->host, dev);
Expand Down Expand Up @@ -836,10 +873,11 @@ static struct fc_lport *fcoe_if_create(struct fcoe_interface *fcoe,
static int __init fcoe_if_init(void)
{
/* attach to scsi transport */
scsi_transport_fcoe_sw =
fc_attach_transport(&fcoe_transport_function);
fcoe_transport_template = fc_attach_transport(&fcoe_transport_function);
fcoe_vport_transport_template =
fc_attach_transport(&fcoe_vport_transport_function);

if (!scsi_transport_fcoe_sw) {
if (!fcoe_transport_template) {
printk(KERN_ERR "fcoe: Failed to attach to the FC transport\n");
return -ENODEV;
}
Expand All @@ -854,8 +892,10 @@ static int __init fcoe_if_init(void)
*/
int __exit fcoe_if_exit(void)
{
fc_release_transport(scsi_transport_fcoe_sw);
scsi_transport_fcoe_sw = NULL;
fc_release_transport(fcoe_transport_template);
fc_release_transport(fcoe_vport_transport_template);
fcoe_transport_template = NULL;
fcoe_vport_transport_template = NULL;
return 0;
}

Expand Down

0 comments on commit e9084bb

Please sign in to comment.