linux-scsi.vger.kernel.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).