> Export fcoe_get_wwn, fcoe_validate_vport_create and fcoe_wwn_to_str so > that all > LLDs can use these common function. > Signed-off-by: Bhanu Prakash Gollapudi <bprakash@xxxxxxxxxxxx> This looks good to me. -thanks, Acked-by: Yi Zou <yi.zou@xxxxxxxxx> > > --- > drivers/scsi/fcoe/fcoe.c | 66 +----------------------------- > --- > drivers/scsi/fcoe/fcoe.h | 10 ----- > drivers/scsi/fcoe/fcoe_transport.c | 72 > ++++++++++++++++++++++++++++++++++++ > include/scsi/libfcoe.h | 3 + > 4 files changed, 76 insertions(+), 75 deletions(-) > > diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c > index ba710e3..c30fa27 100644 > --- a/drivers/scsi/fcoe/fcoe.c > +++ b/drivers/scsi/fcoe/fcoe.c > @@ -138,7 +138,6 @@ static int fcoe_vport_create(struct fc_vport *, bool > disabled); > static int fcoe_vport_disable(struct fc_vport *, bool disable); > static void fcoe_set_vport_symbolic_name(struct fc_vport *); > static void fcoe_set_port_id(struct fc_lport *, u32, struct fc_frame *); > -static int fcoe_validate_vport_create(struct fc_vport *); > > static struct libfc_function_template fcoe_libfc_fcn_templ = { > .frame_send = fcoe_xmit, > @@ -577,23 +576,6 @@ static int fcoe_lport_config(struct fc_lport *lport) > } > > /** > - * fcoe_get_wwn() - Get the world wide name from LLD if it supports it > - * @netdev: the associated net device > - * @wwn: the output WWN > - * @type: the type of WWN (WWPN or WWNN) > - * > - * Returns: 0 for success > - */ > -static int fcoe_get_wwn(struct net_device *netdev, u64 *wwn, int type) > -{ > - const struct net_device_ops *ops = netdev->netdev_ops; > - > - if (ops->ndo_fcoe_get_wwn) > - return ops->ndo_fcoe_get_wwn(netdev, wwn, type); > - return -EINVAL; > -} > - > -/** > * fcoe_netdev_features_change - Updates the lport's offload flags based > * on the LLD netdev's FCoE feature flags > */ > @@ -2444,7 +2426,7 @@ static int fcoe_vport_create(struct fc_vport *vport, > bool disabled) > > rc = fcoe_validate_vport_create(vport); > if (rc) { > - wwn_to_str(vport->port_name, buf, sizeof(buf)); > + fcoe_wwn_to_str(vport->port_name, buf, sizeof(buf)); > printk(KERN_ERR "fcoe: Failed to create vport, " > "WWPN (0x%s) already exists\n", > buf); > @@ -2596,49 +2578,3 @@ static void fcoe_set_port_id(struct fc_lport > *lport, > if (fp && fc_frame_payload_op(fp) == ELS_FLOGI) > fcoe_ctlr_recv_flogi(&fcoe->ctlr, lport, fp); > } > - > -/** > - * fcoe_validate_vport_create() - Validate a vport before creating it > - * @vport: NPIV port to be created > - * > - * This routine is meant to add validation for a vport before creating > it > - * via fcoe_vport_create(). > - * Current validations are: > - * - WWPN supplied is unique for given lport > - * > - * > -*/ > -static int fcoe_validate_vport_create(struct fc_vport *vport) > -{ > - struct Scsi_Host *shost = vport_to_shost(vport); > - struct fc_lport *n_port = shost_priv(shost); > - struct fc_lport *vn_port; > - int rc = 0; > - char buf[32]; > - > - mutex_lock(&n_port->lp_mutex); > - > - wwn_to_str(vport->port_name, buf, sizeof(buf)); > - /* Check if the wwpn is not same as that of the lport */ > - if (!memcmp(&n_port->wwpn, &vport->port_name, sizeof(u64))) { > - FCOE_DBG("vport WWPN 0x%s is same as that of the " > - "base port WWPN\n", buf); > - rc = -EINVAL; > - goto out; > - } > - > - /* Check if there is any existing vport with same wwpn */ > - list_for_each_entry(vn_port, &n_port->vports, list) { > - if (!memcmp(&vn_port->wwpn, &vport->port_name, sizeof(u64))) > { > - FCOE_DBG("vport with given WWPN 0x%s already " > - "exists\n", buf); > - rc = -EINVAL; > - break; > - } > - } > - > -out: > - mutex_unlock(&n_port->lp_mutex); > - > - return rc; > -} > diff --git a/drivers/scsi/fcoe/fcoe.h b/drivers/scsi/fcoe/fcoe.h > index c4a9399..408a6fd 100644 > --- a/drivers/scsi/fcoe/fcoe.h > +++ b/drivers/scsi/fcoe/fcoe.h > @@ -99,14 +99,4 @@ static inline struct net_device *fcoe_netdev(const > struct fc_lport *lport) > ((struct fcoe_port *)lport_priv(lport))->priv)->netdev; > } > > -static inline void wwn_to_str(u64 wwn, char *buf, int len) > -{ > - u8 wwpn[8]; > - > - u64_to_wwn(wwn, wwpn); > - snprintf(buf, len, "%02x%02x%02x%02x%02x%02x%02x%02x", > - wwpn[0], wwpn[1], wwpn[2], wwpn[3], > - wwpn[4], wwpn[5], wwpn[6], wwpn[7]); > -} > - > #endif /* _FCOE_H_ */ > diff --git a/drivers/scsi/fcoe/fcoe_transport.c > b/drivers/scsi/fcoe/fcoe_transport.c > index 41068e8..50c8c4a 100644 > --- a/drivers/scsi/fcoe/fcoe_transport.c > +++ b/drivers/scsi/fcoe/fcoe_transport.c > @@ -83,6 +83,78 @@ static struct notifier_block libfcoe_notifier = { > .notifier_call = libfcoe_device_notification, > }; > > +void fcoe_wwn_to_str(u64 wwn, char *buf, int len) > +{ > + u8 wwpn[8]; > + > + u64_to_wwn(wwn, wwpn); > + snprintf(buf, len, "%02x%02x%02x%02x%02x%02x%02x%02x", > + wwpn[0], wwpn[1], wwpn[2], wwpn[3], > + wwpn[4], wwpn[5], wwpn[6], wwpn[7]); > +} > +EXPORT_SYMBOL_GPL(fcoe_wwn_to_str); > + > +/** > + * fcoe_validate_vport_create() - Validate a vport before creating it > + * @vport: NPIV port to be created > + * > + * This routine is meant to add validation for a vport before creating > it > + * via fcoe_vport_create(). > + * Current validations are: > + * - WWPN supplied is unique for given lport > + */ > +int fcoe_validate_vport_create(struct fc_vport *vport) > +{ > + struct Scsi_Host *shost = vport_to_shost(vport); > + struct fc_lport *n_port = shost_priv(shost); > + struct fc_lport *vn_port; > + int rc = 0; > + char buf[32]; > + > + mutex_lock(&n_port->lp_mutex); > + > + fcoe_wwn_to_str(vport->port_name, buf, sizeof(buf)); > + /* Check if the wwpn is not same as that of the lport */ > + if (!memcmp(&n_port->wwpn, &vport->port_name, sizeof(u64))) { > + LIBFCOE_TRANSPORT_DBG("vport WWPN 0x%s is same as that of the > " > + "base port WWPN\n", buf); > + rc = -EINVAL; > + goto out; > + } > + > + /* Check if there is any existing vport with same wwpn */ > + list_for_each_entry(vn_port, &n_port->vports, list) { > + if (!memcmp(&vn_port->wwpn, &vport->port_name, sizeof(u64))) > { > + LIBFCOE_TRANSPORT_DBG("vport with given WWPN 0x%s " > + "already exists\n", buf); > + rc = -EINVAL; > + break; > + } > + } > +out: > + mutex_unlock(&n_port->lp_mutex); > + return rc; > +} > +EXPORT_SYMBOL_GPL(fcoe_validate_vport_create); > + > +/** > + * fcoe_get_wwn() - Get the world wide name from LLD if it supports it > + * @netdev: the associated net device > + * @wwn: the output WWN > + * @type: the type of WWN (WWPN or WWNN) > + * > + * Returns: 0 for success > + */ > +int fcoe_get_wwn(struct net_device *netdev, u64 *wwn, int type) > +{ > + const struct net_device_ops *ops = netdev->netdev_ops; > + > + if (ops->ndo_fcoe_get_wwn) > + return ops->ndo_fcoe_get_wwn(netdev, wwn, type); > + return -EINVAL; > +} > +EXPORT_SYMBOL_GPL(fcoe_get_wwn); > + > /** > * fcoe_fc_crc() - Calculates the CRC for a given frame > * @fp: The frame to be checksumed > diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h > index 8c1638b..0b2f843 100644 > --- a/include/scsi/libfcoe.h > +++ b/include/scsi/libfcoe.h > @@ -229,6 +229,9 @@ int fcoe_libfc_config(struct fc_lport *, struct > fcoe_ctlr *, > const struct libfc_function_template *, int init_fcp); > u32 fcoe_fc_crc(struct fc_frame *fp); > int fcoe_start_io(struct sk_buff *skb); > +int fcoe_get_wwn(struct net_device *netdev, u64 *wwn, int type); > +void fcoe_wwn_to_str(u64 wwn, char *buf, int len); > +int fcoe_validate_vport_create(struct fc_vport *vport); > > /** > * is_fip_mode() - returns true if FIP mode selected. > -- > 1.7.0.6 > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-scsi" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html