All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.de>
To: Robert Love <robert.w.love@intel.com>
Cc: linux-scsi@vger.kernel.org, james.smart@emulex.com, devel@open-fcoe.org
Subject: Re: [Open-FCoE] [PATCH] scsi_transport_fc: Add sysfs entry for HBA API management library
Date: Thu, 04 Oct 2012 09:08:46 +0200	[thread overview]
Message-ID: <506D35FE.10202@suse.de> (raw)
In-Reply-To: <20121003201237.28626.15887.stgit@fritz>

On 10/03/2012 10:12 PM, Robert Love wrote:
> The user space HBA API vendor libraries need to know which HBA/CNAs
> hosts to manage. Currently, libhbalinux is used to manage a few drivers
> that use libfcoe and libfc. Right now libhbalinux keys off of the
> string " over " in the FC Host's symbolic_name attribute to determine
> if it should manage a given host. fnic, bnx2fc and fcoe/netdev based
> hosts all use " over " in their symboic_names and that is currently
> what libhbalinux looks for to determine if it should manage hosts
> created by those drivers.
>
> Clearly using " over " in the symbolic_name isn't descriptive
> and it is an awkward way to determine whether libhbalinux should
> manage a host. Also, drivers may wish to use more descriptive
> and accurate symbolic_names because these strings are displayed
> in fabric management applications; forcing them to use " over "
> in their symbolic_name is unnecessarily restrictive.
>
> This patch adds a read-only attribute to the FC Host that will expose
> which management library should be used to manage it.
>
> This attribute will not be present in sysfs for drivers that
> do no implement the .show_hbaapi_lib routine.
>
> Signed-off-by: Robert Love <robert.w.love@intel.com>
> Tested-by: Ross Brattain <ross.b.brattain@intel.com>
> ---
>   drivers/scsi/bnx2fc/bnx2fc_fcoe.c |    4 ++++
>   drivers/scsi/fcoe/fcoe.c          |    4 ++++
>   drivers/scsi/fnic/fnic_main.c     |    4 ++++
>   drivers/scsi/scsi_transport_fc.c  |    5 ++++-
>   include/scsi/libfc.h              |    2 ++
>   include/scsi/scsi_transport_fc.h  |    4 ++++
>   6 files changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
> index ae1cb76..97f60d8 100644
> --- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
> +++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
> @@ -731,6 +731,9 @@ static int bnx2fc_shost_config(struct fc_lport *lport, struct device *dev)
>   		BNX2FC_NAME, BNX2FC_VERSION,
>   		interface->netdev->name);
>
> +	strncpy(fc_host_hbaapi_library(lport->host), FC_LIBHBALINUX_NAME,
> +		FC_SYMBOLIC_NAME_SIZE);
> +
>   	return 0;
>   }
>
> @@ -2583,6 +2586,7 @@ static struct fc_function_template bnx2fc_transport_function = {
>   	.get_host_port_state = fc_get_host_port_state,
>   	.show_host_port_state = 1,
>   	.show_host_symbolic_name = 1,
> +	.show_host_hbaapi_library = 1,
>
>   	.dd_fcrport_size = (sizeof(struct fc_rport_libfc_priv) +
>   				sizeof(struct bnx2fc_rport)),
> diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
> index 078d262..812876f 100644
> --- a/drivers/scsi/fcoe/fcoe.c
> +++ b/drivers/scsi/fcoe/fcoe.c
> @@ -201,6 +201,7 @@ static struct fc_function_template fcoe_nport_fc_functions = {
>   	.get_host_port_state = fc_get_host_port_state,
>   	.show_host_port_state = 1,
>   	.show_host_symbolic_name = 1,
> +	.show_host_hbaapi_library = 1,
>
>   	.dd_fcrport_size = sizeof(struct fc_rport_libfc_priv),
>   	.show_rport_maxframe_size = 1,
> @@ -755,6 +756,9 @@ static int fcoe_shost_config(struct fc_lport *lport, struct device *dev)
>   		 "%s v%s over %s", FCOE_NAME, FCOE_VERSION,
>   		 fcoe_netdev(lport)->name);
>
> +	strncpy(fc_host_hbaapi_library(lport->host), FC_LIBHBALINUX_NAME,
> +		FC_SYMBOLIC_NAME_SIZE);
> +
>   	return 0;
>   }
>
> diff --git a/drivers/scsi/fnic/fnic_main.c b/drivers/scsi/fnic/fnic_main.c
> index fc98eb6..783bd3d 100644
> --- a/drivers/scsi/fnic/fnic_main.c
> +++ b/drivers/scsi/fnic/fnic_main.c
> @@ -138,6 +138,7 @@ static struct fc_function_template fnic_fc_functions = {
>   	.get_host_port_state = fc_get_host_port_state,
>   	.show_host_port_state = 1,
>   	.show_host_symbolic_name = 1,
> +	.show_host_hbaapi_library = 1,
>   	.show_rport_maxframe_size = 1,
>   	.show_rport_supported_classes = 1,
>   	.show_host_fabric_name = 1,
> @@ -704,6 +705,9 @@ static int __devinit fnic_probe(struct pci_dev *pdev,
>   	sprintf(fc_host_symbolic_name(lp->host),
>   		DRV_NAME " v" DRV_VERSION " over %s", fnic->name);
>
> +	strncpy(fc_host_hbaapi_library(lp->host), FC_LIBHBALINUX_NAME,
> +		FC_SYMBOLIC_NAME_SIZE);
> +
>   	spin_lock_irqsave(&fnic_list_lock, flags);
>   	list_add_tail(&fnic->list, &fnic_list);
>   	spin_unlock_irqrestore(&fnic_list_lock, flags);
> diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
> index e894ca7..ed19b42 100644
> --- a/drivers/scsi/scsi_transport_fc.c
> +++ b/drivers/scsi/scsi_transport_fc.c
> @@ -313,7 +313,7 @@ static void fc_scsi_scan_rport(struct work_struct *work);
>   #define FC_STARGET_NUM_ATTRS 	3
>   #define FC_RPORT_NUM_ATTRS	10
>   #define FC_VPORT_NUM_ATTRS	9
> -#define FC_HOST_NUM_ATTRS	29
> +#define FC_HOST_NUM_ATTRS	30
>
>   struct fc_internal {
>   	struct scsi_transport_template t;
> @@ -422,6 +422,7 @@ static int fc_host_setup(struct transport_container *tc, struct device *dev,
>   	fc_host->speed = FC_PORTSPEED_UNKNOWN;
>   	fc_host->fabric_name = -1;
>   	memset(fc_host->symbolic_name, 0, sizeof(fc_host->symbolic_name));
> +	memset(fc_host->hbaapi_library, 0, sizeof(fc_host->hbaapi_library));
>   	memset(fc_host->system_hostname, 0, sizeof(fc_host->system_hostname));
>
>   	fc_host->tgtid_bind_type = FC_TGTID_BIND_BY_WWPN;
> @@ -1529,6 +1530,7 @@ fc_private_host_rd_attr(max_npiv_vports, "%u\n", 20);
>   fc_private_host_rd_attr(serial_number, "%s\n", (FC_SERIAL_NUMBER_SIZE +1));
>   fc_private_host_rd_attr(manufacturer, "%s\n", FC_SERIAL_NUMBER_SIZE + 1);
>   fc_private_host_rd_attr(model, "%s\n", FC_SYMBOLIC_NAME_SIZE + 1);
> +fc_private_host_rd_attr(hbaapi_library, "%s\n", FC_SYMBOLIC_NAME_SIZE + 1);
>   fc_private_host_rd_attr(model_description, "%s\n", FC_SYMBOLIC_NAME_SIZE + 1);
>   fc_private_host_rd_attr(hardware_version, "%s\n", FC_VERSION_STRING_SIZE + 1);
>   fc_private_host_rd_attr(driver_version, "%s\n", FC_VERSION_STRING_SIZE + 1);
> @@ -2262,6 +2264,7 @@ fc_attach_transport(struct fc_function_template *ft)
>   	SETUP_HOST_ATTRIBUTE_RD(speed);
>   	SETUP_HOST_ATTRIBUTE_RD(fabric_name);
>   	SETUP_HOST_ATTRIBUTE_RD(symbolic_name);
> +	SETUP_HOST_ATTRIBUTE_RD(hbaapi_library);
>   	SETUP_HOST_ATTRIBUTE_RW(system_hostname);
>
>   	/* Transport-managed attributes */
> diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
> index 399162b..89630cf 100644
> --- a/include/scsi/libfc.h
> +++ b/include/scsi/libfc.h
> @@ -36,6 +36,8 @@
>
>   #include <scsi/fc_frame.h>
>
> +#define FC_LIBHBALINUX_NAME "libhbalinux"
> +
>   #define	FC_FC4_PROV_SIZE	(FC_TYPE_FCP + 1)	/* size of tables */
>
>   /*
Bah.

You can't be serious.
I totally agree that matching on 'over' is ridiculous.
But hard-coding 'libhbalinux' is also a bad move, simply for the 
fact that libhbalinux is a user-space library and no-one knows how 
long it'll stay around. Or if some vendor would like it to be 
renamed for whatever reason.

No, please. I would rather define a libfc version, and having this 
one displayed fc host attributes.
This way userspace could identify
a) if libfc is used
b) which libfc _version_ is used
and libbhalinux could match onto those.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare@suse.de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2012-10-04  7:08 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-03 20:12 [PATCH] scsi_transport_fc: Add sysfs entry for HBA API management library Robert Love
2012-10-04  7:08 ` Hannes Reinecke [this message]
     [not found]   ` <506D35FE.10202-l3A5Bk7waGM@public.gmane.org>
2012-10-04 21:31     ` Love, Robert W
2012-10-05  2:15       ` [Open-FCoE] " Neil Horman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=506D35FE.10202@suse.de \
    --to=hare@suse.de \
    --cc=devel@open-fcoe.org \
    --cc=james.smart@emulex.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=robert.w.love@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.