All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] fcoe: VN2VN target mode fixes
@ 2016-07-04  8:29 Hannes Reinecke
  2016-07-04  8:29 ` [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft Hannes Reinecke
                   ` (6 more replies)
  0 siblings, 7 replies; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04  8:29 UTC (permalink / raw)
  To: Martin K. Petersen
  Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
	linux-scsi, Hannes Reinecke

Hi all,

When setting up a VN2VN FCoE target there is no real need to
run fcoeadm, especially if DCB is disabled.
So this patchset implements a VIP VLAN responder which can be
enabled by writing to the sysfs attribute 'fip_vlan_responder'.
Additionally there are some fixes for VN2VN mode, most notably
the multicast address update when changing modes.

As usual, comments and reviews are welcome.

Hannes Reinecke (6):
  fc_fip: Update to latest FC-BB-6 draft
  fcoe: use enum for fip_mode
  fcoe: fcoe->realdev is always set
  fcoe: Update multicast addresses on FIP mode change
  fcoe: implement FIP VLAN responder
  fcoe: Use default VLAN for FIP VLAN discovery

 drivers/scsi/bnx2fc/bnx2fc_fcoe.c |   6 +-
 drivers/scsi/fcoe/fcoe.c          |  95 ++++++++++++++--
 drivers/scsi/fcoe/fcoe.h          |   1 +
 drivers/scsi/fcoe/fcoe_ctlr.c     | 234 +++++++++++++++++++++++++++++++++++++-
 drivers/scsi/fcoe/fcoe_sysfs.c    |  39 +++++++
 drivers/scsi/fnic/fnic_fcs.c      |   6 +-
 drivers/scsi/fnic/fnic_fip.h      |   8 --
 include/scsi/fc/fc_fip.h          |  21 +++-
 include/scsi/libfc.h              |   1 +
 include/scsi/libfcoe.h            |  19 ++--
 10 files changed, 391 insertions(+), 39 deletions(-)

-- 
1.8.5.6


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft
  2016-07-04  8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
@ 2016-07-04  8:29 ` Hannes Reinecke
  2016-07-04 10:12   ` Johannes Thumshirn
  2016-07-04  8:29 ` [PATCH 2/6] fcoe: use enum for fip_mode Hannes Reinecke
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04  8:29 UTC (permalink / raw)
  To: Martin K. Petersen
  Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
	linux-scsi, Hannes Reinecke, Hannes Reinecke

Update to latest FC-BB-6 draft to include FIP VN2VN VLAN notifications
and additional flags.

Signed-off-by: Hannes Reinecke <hare@suse.com>
---
 drivers/scsi/fcoe/fcoe_ctlr.c |  8 ++++----
 drivers/scsi/fnic/fnic_fcs.c  |  4 ++--
 drivers/scsi/fnic/fnic_fip.h  |  8 --------
 include/scsi/fc/fc_fip.h      | 21 +++++++++++++++++----
 4 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
index ada4bde..34b2b43 100644
--- a/drivers/scsi/fcoe/fcoe_ctlr.c
+++ b/drivers/scsi/fcoe/fcoe_ctlr.c
@@ -991,7 +991,7 @@ static int fcoe_ctlr_parse_adv(struct fcoe_ctlr *fip,
 			LIBFCOE_FIP_DBG(fip, "unexpected descriptor type %x "
 					"in FIP adv\n", desc->fip_dtype);
 			/* standard says ignore unknown descriptors >= 128 */
-			if (desc->fip_dtype < FIP_DT_VENDOR_BASE)
+			if (desc->fip_dtype < FIP_DT_NON_CRITICAL)
 				return -EINVAL;
 			break;
 		}
@@ -1232,7 +1232,7 @@ static void fcoe_ctlr_recv_els(struct fcoe_ctlr *fip, struct sk_buff *skb)
 			LIBFCOE_FIP_DBG(fip, "unexpected descriptor type %x "
 					"in FIP adv\n", desc->fip_dtype);
 			/* standard says ignore unknown descriptors >= 128 */
-			if (desc->fip_dtype < FIP_DT_VENDOR_BASE)
+			if (desc->fip_dtype < FIP_DT_NON_CRITICAL)
 				goto drop;
 			if (desc_cnt <= 2) {
 				LIBFCOE_FIP_DBG(fip, "FIP descriptors "
@@ -1410,7 +1410,7 @@ static void fcoe_ctlr_recv_clr_vlink(struct fcoe_ctlr *fip,
 			break;
 		default:
 			/* standard says ignore unknown descriptors >= 128 */
-			if (desc->fip_dtype < FIP_DT_VENDOR_BASE)
+			if (desc->fip_dtype < FIP_DT_NON_CRITICAL)
 				goto err;
 			break;
 		}
@@ -2338,7 +2338,7 @@ static int fcoe_ctlr_vn_parse(struct fcoe_ctlr *fip,
 			LIBFCOE_FIP_DBG(fip, "unexpected descriptor type %x "
 					"in FIP probe\n", dtype);
 			/* standard says ignore unknown descriptors >= 128 */
-			if (dtype < FIP_DT_VENDOR_BASE)
+			if (dtype < FIP_DT_NON_CRITICAL)
 				return -EINVAL;
 			break;
 		}
diff --git a/drivers/scsi/fnic/fnic_fcs.c b/drivers/scsi/fnic/fnic_fcs.c
index 67669a9..fe402d0 100644
--- a/drivers/scsi/fnic/fnic_fcs.c
+++ b/drivers/scsi/fnic/fnic_fcs.c
@@ -359,7 +359,7 @@ static void fnic_fcoe_send_vlan_req(struct fnic *fnic)
 
 	vlan->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER);
 	vlan->fip.fip_op = htons(FIP_OP_VLAN);
-	vlan->fip.fip_subcode = FIP_SC_VL_REQ;
+	vlan->fip.fip_subcode = FIP_SC_VL_NOTE;
 	vlan->fip.fip_dl_len = htons(sizeof(vlan->desc) / FIP_BPW);
 
 	vlan->desc.mac.fd_desc.fip_dtype = FIP_DT_MAC;
@@ -551,7 +551,7 @@ static int fnic_fcoe_handle_fip_frame(struct fnic *fnic, struct sk_buff *skb)
 			goto drop;
 		/* pass it on to fcoe */
 		ret = 1;
-	} else if (op == FIP_OP_VLAN && sub == FIP_SC_VL_REP) {
+	} else if (op == FIP_OP_VLAN && sub == FIP_SC_VL_NOTE) {
 		/* set the vlan as used */
 		fnic_fcoe_process_vlan_resp(fnic, skb);
 		ret = 0;
diff --git a/drivers/scsi/fnic/fnic_fip.h b/drivers/scsi/fnic/fnic_fip.h
index 87e74c2..7761f33 100644
--- a/drivers/scsi/fnic/fnic_fip.h
+++ b/drivers/scsi/fnic/fnic_fip.h
@@ -26,14 +26,6 @@
 
 #define FINC_MAX_FLOGI_REJECTS   8
 
-/*
- * FIP_DT_VLAN descriptor.
- */
-struct fip_vlan_desc {
-	struct fip_desc fd_desc;
-	__be16 fd_vlan;
-} __attribute__((packed));
-
 struct vlan {
 	__be16 vid;
 	__be16 type;
diff --git a/include/scsi/fc/fc_fip.h b/include/scsi/fc/fc_fip.h
index ae25d4a..9710254 100644
--- a/include/scsi/fc/fc_fip.h
+++ b/include/scsi/fc/fc_fip.h
@@ -22,7 +22,7 @@
 /*
  * This version is based on:
  * http://www.t11.org/ftp/t11/pub/fc/bb-5/08-543v1.pdf
- * and T11 FC-BB-6 10-019v4.pdf (June 2010 VN2VN proposal)
+ * and T11 FC-BB-6 13-091v5.pdf (December 2013 VN2VN proposal)
  */
 
 #define FIP_DEF_PRI	128	/* default selection priority */
@@ -109,8 +109,9 @@ enum fip_reset_subcode {
  * Subcodes for FIP_OP_VLAN.
  */
 enum fip_vlan_subcode {
-	FIP_SC_VL_REQ =	1,		/* request */
-	FIP_SC_VL_REP =	2,		/* reply */
+	FIP_SC_VL_REQ =	1,		/* vlan request */
+	FIP_SC_VL_NOTE = 2,		/* vlan notification */
+	FIP_SC_VL_VN2VN_NOTE = 3,	/* VN2VN vlan notification */
 };
 
 /*
@@ -130,6 +131,8 @@ enum fip_vn2vn_subcode {
 enum fip_flag {
 	FIP_FL_FPMA =	0x8000,		/* supports FPMA fabric-provided MACs */
 	FIP_FL_SPMA =	0x4000,		/* supports SPMA server-provided MACs */
+	FIP_FL_FCF =	0x0020,		/* originated from a controlling FCF */
+	FIP_FL_FDF =	0x0010,		/* originated from an FDF */
 	FIP_FL_REC_OR_P2P = 0x0008,	/* configured addr or point-to-point */
 	FIP_FL_AVAIL =	0x0004,		/* available for FLOGI/ELP */
 	FIP_FL_SOL =	0x0002,		/* this is a solicited message */
@@ -161,7 +164,9 @@ enum fip_desc_type {
 	FIP_DT_VLAN =	14,		/* vlan number */
 	FIP_DT_FC4F =	15,		/* FC-4 features */
 	FIP_DT_LIMIT,			/* max defined desc_type + 1 */
-	FIP_DT_VENDOR_BASE = 128,	/* first vendor-specific desc_type */
+	FIP_DT_NON_CRITICAL = 128,	/* First non-critical descriptor */
+	FIP_DT_CLR_VLINKS = 128,	/* Clear virtual links reason code */
+	FIP_DT_VENDOR_BASE = 241,	/* first vendor-specific desc_type */
 };
 
 /*
@@ -259,6 +264,14 @@ enum fip_fka_flags {
 /* FIP_DT_FKA flags */
 
 /*
+ * FIP_DT_VLAN descriptor
+ */
+struct fip_vlan_desc {
+	struct fip_desc fd_desc;
+	__be16		fd_vlan; /* Note: highest 4 bytes are unused */
+} __attribute__((packed));
+
+/*
  * FIP_DT_FC4F - FC-4 features.
  */
 struct fip_fc4_feat {
-- 
1.8.5.6


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 2/6] fcoe: use enum for fip_mode
  2016-07-04  8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
  2016-07-04  8:29 ` [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft Hannes Reinecke
@ 2016-07-04  8:29 ` Hannes Reinecke
  2016-07-04 10:15   ` Johannes Thumshirn
  2016-07-04  8:29 ` [PATCH 3/6] fcoe: fcoe->realdev is always set Hannes Reinecke
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04  8:29 UTC (permalink / raw)
  To: Martin K. Petersen
  Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
	linux-scsi, Hannes Reinecke, Hannes Reinecke

The FIP mode is independent on the FIP state machine, so use a
separate enum for that instead of overloading it with state
machine values.

Signed-off-by: Hannes Reinecke <hare@suse.com>
---
 drivers/scsi/bnx2fc/bnx2fc_fcoe.c |  6 +++---
 drivers/scsi/fcoe/fcoe.c          |  6 +++---
 drivers/scsi/fcoe/fcoe_ctlr.c     |  2 +-
 drivers/scsi/fnic/fnic_fcs.c      |  2 +-
 include/scsi/libfcoe.h            | 14 ++++++++------
 5 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
index d6800af..a5052dd 100644
--- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
+++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
@@ -57,7 +57,7 @@ static struct scsi_host_template bnx2fc_shost_template;
 static struct fc_function_template bnx2fc_transport_function;
 static struct fcoe_sysfs_function_template bnx2fc_fcoe_sysfs_templ;
 static struct fc_function_template bnx2fc_vport_xport_function;
-static int bnx2fc_create(struct net_device *netdev, enum fip_state fip_mode);
+static int bnx2fc_create(struct net_device *netdev, enum fip_mode fip_mode);
 static void __bnx2fc_destroy(struct bnx2fc_interface *interface);
 static int bnx2fc_destroy(struct net_device *net_device);
 static int bnx2fc_enable(struct net_device *netdev);
@@ -2260,7 +2260,7 @@ enum bnx2fc_create_link_state {
  * Returns: 0 for success
  */
 static int _bnx2fc_create(struct net_device *netdev,
-			  enum fip_state fip_mode,
+			  enum fip_mode fip_mode,
 			  enum bnx2fc_create_link_state link_state)
 {
 	struct fcoe_ctlr_device *cdev;
@@ -2412,7 +2412,7 @@ mod_err:
  *
  * Returns: 0 for success
  */
-static int bnx2fc_create(struct net_device *netdev, enum fip_state fip_mode)
+static int bnx2fc_create(struct net_device *netdev, enum fip_mode fip_mode)
 {
 	return _bnx2fc_create(netdev, fip_mode, BNX2FC_CREATE_LINK_UP);
 }
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index f7c7ccc..9c3742d 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -107,7 +107,7 @@ static int fcoe_dcb_app_notification(struct notifier_block *notifier,
 				     ulong event, void *ptr);
 
 static bool fcoe_match(struct net_device *netdev);
-static int fcoe_create(struct net_device *netdev, enum fip_state fip_mode);
+static int fcoe_create(struct net_device *netdev, enum fip_mode fip_mode);
 static int fcoe_destroy(struct net_device *netdev);
 static int fcoe_enable(struct net_device *netdev);
 static int fcoe_disable(struct net_device *netdev);
@@ -2133,7 +2133,7 @@ enum fcoe_create_link_state {
  * consolidation of code can be done when that interface is
  * removed.
  */
-static int _fcoe_create(struct net_device *netdev, enum fip_state fip_mode,
+static int _fcoe_create(struct net_device *netdev, enum fip_mode fip_mode,
 			enum fcoe_create_link_state link_state)
 {
 	int rc = 0;
@@ -2222,7 +2222,7 @@ out:
  *
  * Returns: 0 for success
  */
-static int fcoe_create(struct net_device *netdev, enum fip_state fip_mode)
+static int fcoe_create(struct net_device *netdev, enum fip_mode fip_mode)
 {
 	return _fcoe_create(netdev, fip_mode, FCOE_CREATE_LINK_UP);
 }
diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
index 34b2b43..26a0685 100644
--- a/drivers/scsi/fcoe/fcoe_ctlr.c
+++ b/drivers/scsi/fcoe/fcoe_ctlr.c
@@ -2864,7 +2864,7 @@ unlock:
  * when nothing is happening.
  */
 static void fcoe_ctlr_mode_set(struct fc_lport *lport, struct fcoe_ctlr *fip,
-			       enum fip_state fip_mode)
+			       enum fip_mode fip_mode)
 {
 	void *priv;
 
diff --git a/drivers/scsi/fnic/fnic_fcs.c b/drivers/scsi/fnic/fnic_fcs.c
index fe402d0..0d532ae 100644
--- a/drivers/scsi/fnic/fnic_fcs.c
+++ b/drivers/scsi/fnic/fnic_fcs.c
@@ -1308,7 +1308,7 @@ void fnic_handle_fip_timer(struct fnic *fnic)
 	}
 	spin_unlock_irqrestore(&fnic->fnic_lock, flags);
 
-	if (fnic->ctlr.mode == FIP_ST_NON_FIP)
+	if (fnic->ctlr.mode == FIP_MODE_NON_FIP)
 		return;
 
 	spin_lock_irqsave(&fnic->vlans_lock, flags);
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h
index c6fbbb6..bcc5c3e 100644
--- a/include/scsi/libfcoe.h
+++ b/include/scsi/libfcoe.h
@@ -78,10 +78,12 @@ enum fip_state {
  * The mode is the state that is to be entered after link up.
  * It must not change after fcoe_ctlr_init() sets it.
  */
-#define FIP_MODE_AUTO		FIP_ST_AUTO
-#define FIP_MODE_NON_FIP	FIP_ST_NON_FIP
-#define FIP_MODE_FABRIC		FIP_ST_ENABLED
-#define FIP_MODE_VN2VN		FIP_ST_VNMP_START
+enum fip_mode {
+	FIP_MODE_AUTO = FIP_ST_AUTO,
+	FIP_MODE_NON_FIP,
+	FIP_MODE_FABRIC,
+	FIP_MODE_VN2VN,
+};
 
 /**
  * struct fcoe_ctlr - FCoE Controller and FIP state
@@ -124,7 +126,7 @@ enum fip_state {
  */
 struct fcoe_ctlr {
 	enum fip_state state;
-	enum fip_state mode;
+	enum fip_mode mode;
 	struct fc_lport *lp;
 	struct fcoe_fcf *sel_fcf;
 	struct list_head fcfs;
@@ -311,7 +313,7 @@ struct fcoe_transport {
 	struct list_head list;
 	bool (*match) (struct net_device *device);
 	int (*alloc) (struct net_device *device);
-	int (*create) (struct net_device *device, enum fip_state fip_mode);
+	int (*create) (struct net_device *device, enum fip_mode fip_mode);
 	int (*destroy) (struct net_device *device);
 	int (*enable) (struct net_device *device);
 	int (*disable) (struct net_device *device);
-- 
1.8.5.6


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 3/6] fcoe: fcoe->realdev is always set
  2016-07-04  8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
  2016-07-04  8:29 ` [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft Hannes Reinecke
  2016-07-04  8:29 ` [PATCH 2/6] fcoe: use enum for fip_mode Hannes Reinecke
@ 2016-07-04  8:29 ` Hannes Reinecke
  2016-07-04 10:16   ` Johannes Thumshirn
  2016-07-04  8:29 ` [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change Hannes Reinecke
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04  8:29 UTC (permalink / raw)
  To: Martin K. Petersen
  Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
	linux-scsi, Hannes Reinecke, Hannes Reinecke

'->realdev' is always set, so this check is pointless.

Signed-off-by: Hannes Reinecke <hare@suse.com>
---
 drivers/scsi/fcoe/fcoe.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 9c3742d..41c67e5 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -770,9 +770,6 @@ static void fcoe_fdmi_info(struct fc_lport *lport, struct net_device *netdev)
 	fcoe = port->priv;
 	realdev = fcoe->realdev;
 
-	if (!realdev)
-		return;
-
 	/* No FDMI state m/c for NPIV ports */
 	if (lport->vport)
 		return;
-- 
1.8.5.6


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change
  2016-07-04  8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
                   ` (2 preceding siblings ...)
  2016-07-04  8:29 ` [PATCH 3/6] fcoe: fcoe->realdev is always set Hannes Reinecke
@ 2016-07-04  8:29 ` Hannes Reinecke
  2016-07-04 10:16   ` Johannes Thumshirn
  2016-07-04  8:29 ` [PATCH 5/6] fcoe: implement FIP VLAN responder Hannes Reinecke
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04  8:29 UTC (permalink / raw)
  To: Martin K. Petersen
  Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
	linux-scsi, Hannes Reinecke, Hannes Reinecke

When the FIP mode is changed we need to update the multicast
addresses to ensure we get the correct frames.

Signed-off-by: Hannes Reinecke <hare@suse.com>
---
 drivers/scsi/fcoe/fcoe.c | 31 +++++++++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 41c67e5..61eda74 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -115,7 +115,7 @@ static int fcoe_disable(struct net_device *netdev);
 /* fcoe_syfs control interface handlers */
 static int fcoe_ctlr_alloc(struct net_device *netdev);
 static int fcoe_ctlr_enabled(struct fcoe_ctlr_device *cdev);
-
+static void fcoe_ctlr_mode(struct fcoe_ctlr_device *ctlr_dev);
 
 static struct fc_seq *fcoe_elsct_send(struct fc_lport *,
 				      u32 did, struct fc_frame *,
@@ -146,8 +146,9 @@ static void fcoe_set_vport_symbolic_name(struct fc_vport *);
 static void fcoe_set_port_id(struct fc_lport *, u32, struct fc_frame *);
 static void fcoe_fcf_get_vlan_id(struct fcoe_fcf_device *);
 
+
 static struct fcoe_sysfs_function_template fcoe_sysfs_templ = {
-	.set_fcoe_ctlr_mode = fcoe_ctlr_set_fip_mode,
+	.set_fcoe_ctlr_mode = fcoe_ctlr_mode,
 	.set_fcoe_ctlr_enabled = fcoe_ctlr_enabled,
 	.get_fcoe_ctlr_link_fail = fcoe_ctlr_get_lesb,
 	.get_fcoe_ctlr_vlink_fail = fcoe_ctlr_get_lesb,
@@ -1976,6 +1977,32 @@ static int fcoe_ctlr_enabled(struct fcoe_ctlr_device *cdev)
 }
 
 /**
+ * fcoe_ctlr_mode() - Switch FIP mode
+ * @cdev: The FCoE Controller that is being modified
+ *
+ * When the FIP mode has been changed we need to update
+ * the multicast addresses to ensure we get the correct
+ * frames.
+ */
+static void fcoe_ctlr_mode(struct fcoe_ctlr_device *ctlr_dev)
+{
+	struct fcoe_ctlr *ctlr = fcoe_ctlr_device_priv(ctlr_dev);
+	struct fcoe_interface *fcoe = fcoe_ctlr_priv(ctlr);
+
+	if (ctlr_dev->mode == FIP_CONN_TYPE_VN2VN &&
+	    ctlr->mode != FIP_MODE_VN2VN) {
+		dev_mc_del(fcoe->netdev, FIP_ALL_ENODE_MACS);
+		dev_mc_add(fcoe->netdev, FIP_ALL_VN2VN_MACS);
+		dev_mc_add(fcoe->netdev, FIP_ALL_P2P_MACS);
+	} else if (ctlr->mode != FIP_MODE_FABRIC) {
+		dev_mc_del(fcoe->netdev, FIP_ALL_VN2VN_MACS);
+		dev_mc_del(fcoe->netdev, FIP_ALL_P2P_MACS);
+		dev_mc_add(fcoe->netdev, FIP_ALL_ENODE_MACS);
+	}
+	fcoe_ctlr_set_fip_mode(ctlr_dev);
+}
+
+/**
  * fcoe_destroy() - Destroy a FCoE interface
  * @netdev  : The net_device object the Ethernet interface to create on
  *
-- 
1.8.5.6


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 5/6] fcoe: implement FIP VLAN responder
  2016-07-04  8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
                   ` (3 preceding siblings ...)
  2016-07-04  8:29 ` [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change Hannes Reinecke
@ 2016-07-04  8:29 ` Hannes Reinecke
  2016-07-04 10:05   ` Johannes Thumshirn
  2016-07-25  7:31   ` Johannes Thumshirn
  2016-07-04  8:29 ` [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery Hannes Reinecke
  2016-07-14  2:11 ` [PATCH 0/6] fcoe: VN2VN target mode fixes Martin K. Petersen
  6 siblings, 2 replies; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04  8:29 UTC (permalink / raw)
  To: Martin K. Petersen
  Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
	linux-scsi, Hannes Reinecke, Hannes Reinecke

When running in VN2VN mode there is no central instance which
would send out any FIP VLAN discovery notifications. So this
patch adds a new sysfs attribute 'fip_vlan_responder' which
will activate a FIP VLAN discovery responder.

Signed-off-by: Hannes Reinecke <hare@suse.com>
---
 drivers/scsi/fcoe/fcoe.c       |   6 ++
 drivers/scsi/fcoe/fcoe_ctlr.c  | 224 +++++++++++++++++++++++++++++++++++++++++
 drivers/scsi/fcoe/fcoe_sysfs.c |  39 +++++++
 include/scsi/libfc.h           |   1 +
 include/scsi/libfcoe.h         |   5 +-
 5 files changed, 274 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 61eda74..c8a4305 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -673,6 +673,12 @@ static int fcoe_netdev_config(struct fc_lport *lport, struct net_device *netdev)
 	fcoe = port->priv;
 	ctlr = fcoe_to_ctlr(fcoe);
 
+	/* Figure out the VLAN ID, if any */
+	if (netdev->priv_flags & IFF_802_1Q_VLAN)
+		lport->vlan = vlan_dev_vlan_id(netdev);
+	else
+		lport->vlan = 0;
+
 	/*
 	 * Determine max frame size based on underlying device and optional
 	 * user-configured limit.  If the MFS is too low, fcoe_link_ok()
diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
index 26a0685..32988e6 100644
--- a/drivers/scsi/fcoe/fcoe_ctlr.c
+++ b/drivers/scsi/fcoe/fcoe_ctlr.c
@@ -59,6 +59,8 @@ static int fcoe_ctlr_vn_recv(struct fcoe_ctlr *, struct sk_buff *);
 static void fcoe_ctlr_vn_timeout(struct fcoe_ctlr *);
 static int fcoe_ctlr_vn_lookup(struct fcoe_ctlr *, u32, u8 *);
 
+static int fcoe_ctlr_vlan_recv(struct fcoe_ctlr *, struct sk_buff *);
+
 static u8 fcoe_all_fcfs[ETH_ALEN] = FIP_ALL_FCF_MACS;
 static u8 fcoe_all_enode[ETH_ALEN] = FIP_ALL_ENODE_MACS;
 static u8 fcoe_all_vn2vn[ETH_ALEN] = FIP_ALL_VN2VN_MACS;
@@ -149,6 +151,7 @@ void fcoe_ctlr_init(struct fcoe_ctlr *fip, enum fip_state mode)
 {
 	fcoe_ctlr_set_state(fip, FIP_ST_LINK_WAIT);
 	fip->mode = mode;
+	fip->fip_resp = false;
 	INIT_LIST_HEAD(&fip->fcfs);
 	mutex_init(&fip->ctlr_mutex);
 	spin_lock_init(&fip->ctlr_lock);
@@ -1513,6 +1516,7 @@ static int fcoe_ctlr_recv_handler(struct fcoe_ctlr *fip, struct sk_buff *skb)
 	struct fip_header *fiph;
 	struct ethhdr *eh;
 	enum fip_state state;
+	bool fip_vlan_resp = false;
 	u16 op;
 	u8 sub;
 
@@ -1546,11 +1550,17 @@ static int fcoe_ctlr_recv_handler(struct fcoe_ctlr *fip, struct sk_buff *skb)
 		state = FIP_ST_ENABLED;
 		LIBFCOE_FIP_DBG(fip, "Using FIP mode\n");
 	}
+	fip_vlan_resp = fip->fip_resp;
 	mutex_unlock(&fip->ctlr_mutex);
 
 	if (fip->mode == FIP_MODE_VN2VN && op == FIP_OP_VN2VN)
 		return fcoe_ctlr_vn_recv(fip, skb);
 
+	if (fip_vlan_resp && op == FIP_OP_VLAN) {
+		LIBFCOE_FIP_DBG(fip, "fip vlan discovery\n");
+		return fcoe_ctlr_vlan_recv(fip, skb);
+	}
+
 	if (state != FIP_ST_ENABLED && state != FIP_ST_VNMP_UP &&
 	    state != FIP_ST_VNMP_CLAIM)
 		goto drop;
@@ -2704,6 +2714,220 @@ drop:
 }
 
 /**
+ * fcoe_ctlr_vlan_parse - parse vlan discovery request or response
+ * @fip: The FCoE controller
+ * @skb: incoming packet
+ * @rdata: buffer for resulting parsed VLAN entry plus fcoe_rport
+ *
+ * Returns non-zero error number on error.
+ * Does not consume the packet.
+ */
+static int fcoe_ctlr_vlan_parse(struct fcoe_ctlr *fip,
+			      struct sk_buff *skb,
+			      struct fc_rport_priv *rdata)
+{
+	struct fip_header *fiph;
+	struct fip_desc *desc = NULL;
+	struct fip_mac_desc *macd = NULL;
+	struct fip_wwn_desc *wwn = NULL;
+	struct fcoe_rport *frport;
+	size_t rlen;
+	size_t dlen;
+	u32 desc_mask = 0;
+	u32 dtype;
+	u8 sub;
+
+	memset(rdata, 0, sizeof(*rdata) + sizeof(*frport));
+	frport = fcoe_ctlr_rport(rdata);
+
+	fiph = (struct fip_header *)skb->data;
+	frport->flags = ntohs(fiph->fip_flags);
+
+	sub = fiph->fip_subcode;
+	switch (sub) {
+	case FIP_SC_VL_REQ:
+		desc_mask = BIT(FIP_DT_MAC) | BIT(FIP_DT_NAME);
+		break;
+	default:
+		LIBFCOE_FIP_DBG(fip, "vn_parse unknown subcode %u\n", sub);
+		return -EINVAL;
+	}
+
+	rlen = ntohs(fiph->fip_dl_len) * 4;
+	if (rlen + sizeof(*fiph) > skb->len)
+		return -EINVAL;
+
+	desc = (struct fip_desc *)(fiph + 1);
+	while (rlen > 0) {
+		dlen = desc->fip_dlen * FIP_BPW;
+		if (dlen < sizeof(*desc) || dlen > rlen)
+			return -EINVAL;
+
+		dtype = desc->fip_dtype;
+		if (dtype < 32) {
+			if (!(desc_mask & BIT(dtype))) {
+				LIBFCOE_FIP_DBG(fip,
+						"unexpected or duplicated desc "
+						"desc type %u in "
+						"FIP VN2VN subtype %u\n",
+						dtype, sub);
+				return -EINVAL;
+			}
+			desc_mask &= ~BIT(dtype);
+		}
+
+		switch (dtype) {
+		case FIP_DT_MAC:
+			if (dlen != sizeof(struct fip_mac_desc))
+				goto len_err;
+			macd = (struct fip_mac_desc *)desc;
+			if (!is_valid_ether_addr(macd->fd_mac)) {
+				LIBFCOE_FIP_DBG(fip,
+					"Invalid MAC addr %pM in FIP VN2VN\n",
+					 macd->fd_mac);
+				return -EINVAL;
+			}
+			memcpy(frport->enode_mac, macd->fd_mac, ETH_ALEN);
+			break;
+		case FIP_DT_NAME:
+			if (dlen != sizeof(struct fip_wwn_desc))
+				goto len_err;
+			wwn = (struct fip_wwn_desc *)desc;
+			rdata->ids.node_name = get_unaligned_be64(&wwn->fd_wwn);
+			break;
+		default:
+			LIBFCOE_FIP_DBG(fip, "unexpected descriptor type %x "
+					"in FIP probe\n", dtype);
+			/* standard says ignore unknown descriptors >= 128 */
+			if (dtype < FIP_DT_NON_CRITICAL)
+				return -EINVAL;
+			break;
+		}
+		desc = (struct fip_desc *)((char *)desc + dlen);
+		rlen -= dlen;
+	}
+	return 0;
+
+len_err:
+	LIBFCOE_FIP_DBG(fip, "FIP length error in descriptor type %x len %zu\n",
+			dtype, dlen);
+	return -EINVAL;
+}
+
+/**
+ * fcoe_ctlr_vlan_send() - Send a FIP VLAN Notification
+ * @fip: The FCoE controller
+ * @sub: sub-opcode for vlan notification or vn2vn vlan notification
+ * @dest: The destination Ethernet MAC address
+ * @min_len: minimum size of the Ethernet payload to be sent
+ */
+static void fcoe_ctlr_vlan_send(struct fcoe_ctlr *fip,
+			      enum fip_vlan_subcode sub,
+			      const u8 *dest)
+{
+	struct sk_buff *skb;
+	struct fip_frame {
+		struct ethhdr eth;
+		struct fip_header fip;
+		struct fip_mac_desc mac;
+		struct fip_vlan_desc vlan;
+	} __packed * frame;
+	size_t len;
+	size_t dlen;
+
+	len = sizeof(*frame);
+	dlen = sizeof(frame->mac) + sizeof(frame->vlan);
+	len = max(len, sizeof(struct ethhdr));
+
+	skb = dev_alloc_skb(len);
+	if (!skb)
+		return;
+
+	LIBFCOE_FIP_DBG(fip, "fip %s vlan notification, vlan %d\n",
+			fip->mode == FIP_MODE_VN2VN ? "vn2vn" : "fcf",
+			fip->lp->vlan);
+
+	frame = (struct fip_frame *)skb->data;
+	memset(frame, 0, len);
+	memcpy(frame->eth.h_dest, dest, ETH_ALEN);
+
+	memcpy(frame->eth.h_source, fip->ctl_src_addr, ETH_ALEN);
+	frame->eth.h_proto = htons(ETH_P_FIP);
+
+	frame->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER);
+	frame->fip.fip_op = htons(FIP_OP_VLAN);
+	frame->fip.fip_subcode = sub;
+	frame->fip.fip_dl_len = htons(dlen / FIP_BPW);
+
+	frame->mac.fd_desc.fip_dtype = FIP_DT_MAC;
+	frame->mac.fd_desc.fip_dlen = sizeof(frame->mac) / FIP_BPW;
+	memcpy(frame->mac.fd_mac, fip->ctl_src_addr, ETH_ALEN);
+
+	frame->vlan.fd_desc.fip_dtype = FIP_DT_VLAN;
+	frame->vlan.fd_desc.fip_dlen = sizeof(frame->vlan) / FIP_BPW;
+	put_unaligned_be16(fip->lp->vlan, &frame->vlan.fd_vlan);
+
+	skb_put(skb, len);
+	skb->protocol = htons(ETH_P_FIP);
+	skb->priority = fip->priority;
+	skb_reset_mac_header(skb);
+	skb_reset_network_header(skb);
+
+	fip->send(fip, skb);
+}
+
+/**
+ * fcoe_ctlr_vlan_disk_reply() - send FIP VLAN Discovery Notification.
+ * @fip: The FCoE controller
+ *
+ * Called with ctlr_mutex held.
+ */
+static void fcoe_ctlr_vlan_disc_reply(struct fcoe_ctlr *fip,
+				      struct fc_rport_priv *rdata)
+{
+	struct fcoe_rport *frport = fcoe_ctlr_rport(rdata);
+	enum fip_vlan_subcode sub = FIP_SC_VL_NOTE;
+
+	if (fip->mode == FIP_MODE_VN2VN)
+		sub = FIP_SC_VL_VN2VN_NOTE;
+
+	fcoe_ctlr_vlan_send(fip, sub, frport->enode_mac);
+}
+
+/**
+ * fcoe_ctlr_vlan_recv - vlan request receive handler for VN2VN mode.
+ * @lport: The local port
+ * @fp: The received frame
+ *
+ */
+static int fcoe_ctlr_vlan_recv(struct fcoe_ctlr *fip, struct sk_buff *skb)
+{
+	struct fip_header *fiph;
+	enum fip_vlan_subcode sub;
+	struct {
+		struct fc_rport_priv rdata;
+		struct fcoe_rport frport;
+	} buf;
+	int rc;
+
+	fiph = (struct fip_header *)skb->data;
+	sub = fiph->fip_subcode;
+	rc = fcoe_ctlr_vlan_parse(fip, skb, &buf.rdata);
+	if (rc) {
+		LIBFCOE_FIP_DBG(fip, "vlan_recv vlan_parse error %d\n", rc);
+		goto drop;
+	}
+	mutex_lock(&fip->ctlr_mutex);
+	if (sub == FIP_SC_VL_REQ)
+		fcoe_ctlr_vlan_disc_reply(fip, &buf.rdata);
+	mutex_unlock(&fip->ctlr_mutex);
+
+drop:
+	kfree(skb);
+	return rc;
+}
+
+/**
  * fcoe_ctlr_disc_recv - discovery receive handler for VN2VN mode.
  * @lport: The local port
  * @fp: The received frame
diff --git a/drivers/scsi/fcoe/fcoe_sysfs.c b/drivers/scsi/fcoe/fcoe_sysfs.c
index 045c4e1..0675fd1 100644
--- a/drivers/scsi/fcoe/fcoe_sysfs.c
+++ b/drivers/scsi/fcoe/fcoe_sysfs.c
@@ -385,6 +385,44 @@ static FCOE_DEVICE_ATTR(ctlr, enabled, S_IRUGO | S_IWUSR,
 			show_ctlr_enabled_state,
 			store_ctlr_enabled);
 
+static ssize_t store_ctlr_fip_resp(struct device *dev,
+			      struct device_attribute *attr,
+			      const char *buf, size_t count)
+{
+	struct fcoe_ctlr_device *ctlr = dev_to_ctlr(dev);
+	struct fcoe_ctlr *fip = fcoe_ctlr_device_priv(ctlr);
+
+	mutex_lock(&fip->ctlr_mutex);
+	if ((buf[1] == '\0') || ((buf[1] == '\n') && (buf[2] == '\0'))) {
+		if (buf[0] == '1') {
+			fip->fip_resp = 1;
+			mutex_unlock(&fip->ctlr_mutex);
+			return count;
+		}
+		if (buf[0] == '0') {
+			fip->fip_resp = 0;
+			mutex_unlock(&fip->ctlr_mutex);
+			return count;
+		}
+	}
+	mutex_unlock(&fip->ctlr_mutex);
+	return -EINVAL;
+}
+
+static ssize_t show_ctlr_fip_resp(struct device *dev,
+				  struct device_attribute *attr,
+				  char *buf)
+{
+	struct fcoe_ctlr_device *ctlr = dev_to_ctlr(dev);
+	struct fcoe_ctlr *fip = fcoe_ctlr_device_priv(ctlr);
+
+	return sprintf(buf, "%d\n", fip->fip_resp ? 1 : 0);
+}
+
+static FCOE_DEVICE_ATTR(ctlr, fip_vlan_responder, S_IRUGO | S_IWUSR,
+			show_ctlr_fip_resp,
+			store_ctlr_fip_resp);
+
 static ssize_t
 store_private_fcoe_ctlr_fcf_dev_loss_tmo(struct device *dev,
 					 struct device_attribute *attr,
@@ -467,6 +505,7 @@ static struct attribute_group fcoe_ctlr_lesb_attr_group = {
 };
 
 static struct attribute *fcoe_ctlr_attrs[] = {
+	&device_attr_fcoe_ctlr_fip_vlan_responder.attr,
 	&device_attr_fcoe_ctlr_fcf_dev_loss_tmo.attr,
 	&device_attr_fcoe_ctlr_enabled.attr,
 	&device_attr_fcoe_ctlr_mode.attr,
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
index 93d14da..7428a53 100644
--- a/include/scsi/libfc.h
+++ b/include/scsi/libfc.h
@@ -878,6 +878,7 @@ struct fc_lport {
 	struct libfc_function_template tt;
 	u8			       link_up;
 	u8			       qfull;
+	u16			       vlan;
 	enum fc_lport_state	       state;
 	unsigned long		       boot_time;
 	struct fc_host_statistics      host_stats;
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h
index bcc5c3e..722d326 100644
--- a/include/scsi/libfcoe.h
+++ b/include/scsi/libfcoe.h
@@ -110,8 +110,10 @@ enum fip_mode {
  * @flogi_req_send: send of FLOGI requested
  * @flogi_count:   number of FLOGI attempts in AUTO mode.
  * @map_dest:	   use the FC_MAP mode for destination MAC addresses.
+ * @fip_resp:	   start FIP VLAN discovery responder
  * @spma:	   supports SPMA server-provided MACs mode
  * @probe_tries:   number of FC_IDs probed
+ * @priority:      DCBx FCoE APP priority
  * @dest_addr:	   MAC address of the selected FC forwarder.
  * @ctl_src_addr:  the native MAC address of our local port.
  * @send:	   LLD-supplied function to handle sending FIP Ethernet frames
@@ -149,7 +151,8 @@ struct fcoe_ctlr {
 	u16 flogi_oxid;
 	u8 flogi_req_send;
 	u8 flogi_count;
-	u8 map_dest;
+	bool map_dest;
+	bool fip_resp;
 	u8 spma;
 	u8 probe_tries;
 	u8 priority;
-- 
1.8.5.6


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery
  2016-07-04  8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
                   ` (4 preceding siblings ...)
  2016-07-04  8:29 ` [PATCH 5/6] fcoe: implement FIP VLAN responder Hannes Reinecke
@ 2016-07-04  8:29 ` Hannes Reinecke
  2016-07-04 10:18   ` Johannes Thumshirn
  2016-07-25  7:32   ` Johannes Thumshirn
  2016-07-14  2:11 ` [PATCH 0/6] fcoe: VN2VN target mode fixes Martin K. Petersen
  6 siblings, 2 replies; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04  8:29 UTC (permalink / raw)
  To: Martin K. Petersen
  Cc: Johannes Thumshirn, Christoph Hellwig, James Bottomley,
	linux-scsi, Hannes Reinecke, Hannes Reinecke

FC-BB-6 states:
FIP protocols shall be performed on a per-VLAN basis. It is
recommended to use the FIP VLAN discovery protocol on the
default VLAN.

Signed-off-by: Hannes Reinecke <hare@suse.com>
---
 drivers/scsi/fcoe/fcoe.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++-
 drivers/scsi/fcoe/fcoe.h |  1 +
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index c8a4305..197dc62 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -92,6 +92,8 @@ static struct fcoe_interface
 
 static int fcoe_fip_recv(struct sk_buff *, struct net_device *,
 			 struct packet_type *, struct net_device *);
+static int fcoe_fip_vlan_recv(struct sk_buff *, struct net_device *,
+			      struct packet_type *, struct net_device *);
 
 static void fcoe_fip_send(struct fcoe_ctlr *, struct sk_buff *);
 static void fcoe_update_src_mac(struct fc_lport *, u8 *);
@@ -363,6 +365,12 @@ static int fcoe_interface_setup(struct fcoe_interface *fcoe,
 	fcoe->fip_packet_type.dev = netdev;
 	dev_add_pack(&fcoe->fip_packet_type);
 
+	if (netdev != real_dev) {
+		fcoe->fip_vlan_packet_type.func = fcoe_fip_vlan_recv;
+		fcoe->fip_vlan_packet_type.type = htons(ETH_P_FIP);
+		fcoe->fip_vlan_packet_type.dev = real_dev;
+		dev_add_pack(&fcoe->fip_vlan_packet_type);
+	}
 	return 0;
 }
 
@@ -450,6 +458,8 @@ static void fcoe_interface_remove(struct fcoe_interface *fcoe)
 	 */
 	__dev_remove_pack(&fcoe->fcoe_packet_type);
 	__dev_remove_pack(&fcoe->fip_packet_type);
+	if (netdev != fcoe->realdev)
+		__dev_remove_pack(&fcoe->fip_vlan_packet_type);
 	synchronize_net();
 
 	/* Delete secondary MAC addresses */
@@ -520,6 +530,29 @@ static int fcoe_fip_recv(struct sk_buff *skb, struct net_device *netdev,
 }
 
 /**
+ * fcoe_fip_vlan_recv() - Handler for received FIP VLAN discovery frames
+ * @skb:      The receive skb
+ * @netdev:   The associated net device
+ * @ptype:    The packet_type structure which was used to register this handler
+ * @orig_dev: The original net_device the the skb was received on.
+ *	      (in case dev is a bond)
+ *
+ * Returns: 0 for success
+ */
+static int fcoe_fip_vlan_recv(struct sk_buff *skb, struct net_device *netdev,
+			      struct packet_type *ptype,
+			      struct net_device *orig_dev)
+{
+	struct fcoe_interface *fcoe;
+	struct fcoe_ctlr *ctlr;
+
+	fcoe = container_of(ptype, struct fcoe_interface, fip_vlan_packet_type);
+	ctlr = fcoe_to_ctlr(fcoe);
+	fcoe_ctlr_recv(ctlr, skb);
+	return 0;
+}
+
+/**
  * fcoe_port_send() - Send an Ethernet-encapsulated FIP/FCoE frame
  * @port: The FCoE port
  * @skb: The FIP/FCoE packet to be sent
@@ -539,7 +572,21 @@ static void fcoe_port_send(struct fcoe_port *port, struct sk_buff *skb)
  */
 static void fcoe_fip_send(struct fcoe_ctlr *fip, struct sk_buff *skb)
 {
-	skb->dev = fcoe_from_ctlr(fip)->netdev;
+	struct fcoe_interface *fcoe = fcoe_from_ctlr(fip);
+	struct fip_frame {
+		struct ethhdr eth;
+		struct fip_header fip;
+	} __packed *frame;
+
+	/*
+	 * Use default VLAN for FIP VLAN discovery protocol
+	 */
+	frame = (struct fip_frame *)skb->data;
+	if (frame->fip.fip_op == ntohs(FIP_OP_VLAN) &&
+	    fcoe->realdev != fcoe->netdev)
+		skb->dev = fcoe->realdev;
+	else
+		skb->dev = fcoe->netdev;
 	fcoe_port_send(lport_priv(fip->lp), skb);
 }
 
diff --git a/drivers/scsi/fcoe/fcoe.h b/drivers/scsi/fcoe/fcoe.h
index 2b53672..6aa4820 100644
--- a/drivers/scsi/fcoe/fcoe.h
+++ b/drivers/scsi/fcoe/fcoe.h
@@ -80,6 +80,7 @@ struct fcoe_interface {
 	struct net_device  *realdev;
 	struct packet_type fcoe_packet_type;
 	struct packet_type fip_packet_type;
+	struct packet_type fip_vlan_packet_type;
 	struct fc_exch_mgr *oem;
 	u8	removed;
 	u8	priority;
-- 
1.8.5.6


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH 5/6] fcoe: implement FIP VLAN responder
  2016-07-04  8:29 ` [PATCH 5/6] fcoe: implement FIP VLAN responder Hannes Reinecke
@ 2016-07-04 10:05   ` Johannes Thumshirn
  2016-07-04 11:22     ` Hannes Reinecke
  2016-07-25  7:31   ` Johannes Thumshirn
  1 sibling, 1 reply; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:05 UTC (permalink / raw)
  To: Hannes Reinecke
  Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi, Hannes Reinecke

On Mon, Jul 04, 2016 at 10:29:22AM +0200, Hannes Reinecke wrote:
> When running in VN2VN mode there is no central instance which
> would send out any FIP VLAN discovery notifications. So this
> patch adds a new sysfs attribute 'fip_vlan_responder' which
> will activate a FIP VLAN discovery responder.
> 
> Signed-off-by: Hannes Reinecke <hare@suse.com>
> ---

[...]

> +/**
> + * fcoe_ctlr_vlan_send() - Send a FIP VLAN Notification
> + * @fip: The FCoE controller
> + * @sub: sub-opcode for vlan notification or vn2vn vlan notification
> + * @dest: The destination Ethernet MAC address
> + * @min_len: minimum size of the Ethernet payload to be sent
> + */
> +static void fcoe_ctlr_vlan_send(struct fcoe_ctlr *fip,
> +			      enum fip_vlan_subcode sub,
> +			      const u8 *dest)
> +{
> +	struct sk_buff *skb;
> +	struct fip_frame {
> +		struct ethhdr eth;
> +		struct fip_header fip;
> +		struct fip_mac_desc mac;
> +		struct fip_vlan_desc vlan;
> +	} __packed * frame;

Hmmm this is the 2nd time fip_frame is defined in  fcoe_ctlr.c. I'd prefere
having the type definition somewhere else in this file and then use it in
fcoe_ctlr_vlan_send() and fcoe_ctlr_vn_send().

> +	size_t len;
> +	size_t dlen;
> +
> +	len = sizeof(*frame);
> +	dlen = sizeof(frame->mac) + sizeof(frame->vlan);
> +	len = max(len, sizeof(struct ethhdr));
> +
> +	skb = dev_alloc_skb(len);
> +	if (!skb)
> +		return;

dev_alloc_skb() uses GFP_ATOMIC so it's actually not unlikely to fail
so please return -ENOMEM here, just so the caller knows what happened.

> +
> +	LIBFCOE_FIP_DBG(fip, "fip %s vlan notification, vlan %d\n",
> +			fip->mode == FIP_MODE_VN2VN ? "vn2vn" : "fcf",
> +			fip->lp->vlan);
> +
> +	frame = (struct fip_frame *)skb->data;
> +	memset(frame, 0, len);
> +	memcpy(frame->eth.h_dest, dest, ETH_ALEN);
> +
> +	memcpy(frame->eth.h_source, fip->ctl_src_addr, ETH_ALEN);
> +	frame->eth.h_proto = htons(ETH_P_FIP);
> +
> +	frame->fip.fip_ver = FIP_VER_ENCAPS(FIP_VER);
> +	frame->fip.fip_op = htons(FIP_OP_VLAN);
> +	frame->fip.fip_subcode = sub;
> +	frame->fip.fip_dl_len = htons(dlen / FIP_BPW);
> +
> +	frame->mac.fd_desc.fip_dtype = FIP_DT_MAC;
> +	frame->mac.fd_desc.fip_dlen = sizeof(frame->mac) / FIP_BPW;
> +	memcpy(frame->mac.fd_mac, fip->ctl_src_addr, ETH_ALEN);
> +
> +	frame->vlan.fd_desc.fip_dtype = FIP_DT_VLAN;
> +	frame->vlan.fd_desc.fip_dlen = sizeof(frame->vlan) / FIP_BPW;
> +	put_unaligned_be16(fip->lp->vlan, &frame->vlan.fd_vlan);
> +
> +	skb_put(skb, len);
> +	skb->protocol = htons(ETH_P_FIP);
> +	skb->priority = fip->priority;
> +	skb_reset_mac_header(skb);
> +	skb_reset_network_header(skb);
> +
> +	fip->send(fip, skb);
> +}

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft
  2016-07-04  8:29 ` [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft Hannes Reinecke
@ 2016-07-04 10:12   ` Johannes Thumshirn
  0 siblings, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:12 UTC (permalink / raw)
  To: Hannes Reinecke
  Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi, Hannes Reinecke

On Mon, Jul 04, 2016 at 10:29:18AM +0200, Hannes Reinecke wrote:
> Update to latest FC-BB-6 draft to include FIP VN2VN VLAN notifications
> and additional flags.
> 
> Signed-off-by: Hannes Reinecke <hare@suse.com>

Acked-by: Johannes Thumshirn <jth@kernel.org>

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 2/6] fcoe: use enum for fip_mode
  2016-07-04  8:29 ` [PATCH 2/6] fcoe: use enum for fip_mode Hannes Reinecke
@ 2016-07-04 10:15   ` Johannes Thumshirn
  0 siblings, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:15 UTC (permalink / raw)
  To: Hannes Reinecke
  Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi, Hannes Reinecke

On Mon, Jul 04, 2016 at 10:29:19AM +0200, Hannes Reinecke wrote:
> The FIP mode is independent on the FIP state machine, so use a
> separate enum for that instead of overloading it with state
> machine values.
> 
> Signed-off-by: Hannes Reinecke <hare@suse.com>

Acked-by: Johannes Thumshirn <jth@kernel.org>

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 3/6] fcoe: fcoe->realdev is always set
  2016-07-04  8:29 ` [PATCH 3/6] fcoe: fcoe->realdev is always set Hannes Reinecke
@ 2016-07-04 10:16   ` Johannes Thumshirn
  0 siblings, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:16 UTC (permalink / raw)
  To: Hannes Reinecke
  Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi, Hannes Reinecke

On Mon, Jul 04, 2016 at 10:29:20AM +0200, Hannes Reinecke wrote:
> '->realdev' is always set, so this check is pointless.
> 
> Signed-off-by: Hannes Reinecke <hare@suse.com>

Acked-by: Johannes Thumshirn <jth@kernel.org>

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change
  2016-07-04  8:29 ` [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change Hannes Reinecke
@ 2016-07-04 10:16   ` Johannes Thumshirn
  0 siblings, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:16 UTC (permalink / raw)
  To: Hannes Reinecke
  Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi, Hannes Reinecke

On Mon, Jul 04, 2016 at 10:29:21AM +0200, Hannes Reinecke wrote:
> When the FIP mode is changed we need to update the multicast
> addresses to ensure we get the correct frames.
> 
> Signed-off-by: Hannes Reinecke <hare@suse.com>

Acked-by: Johannes Thumshirn <jth@kernel.org>

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery
  2016-07-04  8:29 ` [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery Hannes Reinecke
@ 2016-07-04 10:18   ` Johannes Thumshirn
  2016-07-25  7:32   ` Johannes Thumshirn
  1 sibling, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-04 10:18 UTC (permalink / raw)
  To: Hannes Reinecke
  Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi, Hannes Reinecke

On Mon, Jul 04, 2016 at 10:29:23AM +0200, Hannes Reinecke wrote:
> FC-BB-6 states:
> FIP protocols shall be performed on a per-VLAN basis. It is
> recommended to use the FIP VLAN discovery protocol on the
> default VLAN.
> 
> Signed-off-by: Hannes Reinecke <hare@suse.com>

Given the removal of the duplicate fip_frame struct defition:
Acked-by: Johannes Thumshirn <jth@kernel.org>

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 5/6] fcoe: implement FIP VLAN responder
  2016-07-04 10:05   ` Johannes Thumshirn
@ 2016-07-04 11:22     ` Hannes Reinecke
  0 siblings, 0 replies; 20+ messages in thread
From: Hannes Reinecke @ 2016-07-04 11:22 UTC (permalink / raw)
  To: Johannes Thumshirn, Hannes Reinecke
  Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi

On 07/04/2016 12:05 PM, Johannes Thumshirn wrote:
> On Mon, Jul 04, 2016 at 10:29:22AM +0200, Hannes Reinecke wrote:
>> When running in VN2VN mode there is no central instance which
>> would send out any FIP VLAN discovery notifications. So this
>> patch adds a new sysfs attribute 'fip_vlan_responder' which
>> will activate a FIP VLAN discovery responder.
>>
>> Signed-off-by: Hannes Reinecke <hare@suse.com>
>> ---
> 
> [...]
> 
>> +/**
>> + * fcoe_ctlr_vlan_send() - Send a FIP VLAN Notification
>> + * @fip: The FCoE controller
>> + * @sub: sub-opcode for vlan notification or vn2vn vlan notification
>> + * @dest: The destination Ethernet MAC address
>> + * @min_len: minimum size of the Ethernet payload to be sent
>> + */
>> +static void fcoe_ctlr_vlan_send(struct fcoe_ctlr *fip,
>> +			      enum fip_vlan_subcode sub,
>> +			      const u8 *dest)
>> +{
>> +	struct sk_buff *skb;
>> +	struct fip_frame {
>> +		struct ethhdr eth;
>> +		struct fip_header fip;
>> +		struct fip_mac_desc mac;
>> +		struct fip_vlan_desc vlan;
>> +	} __packed * frame;
> 
> Hmmm this is the 2nd time fip_frame is defined in  fcoe_ctlr.c. I'd prefere
> having the type definition somewhere else in this file and then use it in
> fcoe_ctlr_vlan_send() and fcoe_ctlr_vn_send().
> 
This appears to be the convention in the file; every function which is
sending a frame on the wire defines a local variable 'struct fip_frame'
which contains the actual frame definition.

Might be that the style can be improved, but that should be a separate
patch.

>> +	size_t len;
>> +	size_t dlen;
>> +
>> +	len = sizeof(*frame);
>> +	dlen = sizeof(frame->mac) + sizeof(frame->vlan);
>> +	len = max(len, sizeof(struct ethhdr));
>> +
>> +	skb = dev_alloc_skb(len);
>> +	if (!skb)
>> +		return;
> 
> dev_alloc_skb() uses GFP_ATOMIC so it's actually not unlikely to fail
> so please return -ENOMEM here, just so the caller knows what happened.
> 
Again, the calling convention of fcoe_ctlr_send_vlan() insists on using
a void return.
Yes, this should be improved, but again with another patch.

So do I need to send two additional patches for updating the infrastructure?

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		   Teamlead Storage & Networking
hare@suse.de			               +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 0/6] fcoe: VN2VN target mode fixes
  2016-07-04  8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
                   ` (5 preceding siblings ...)
  2016-07-04  8:29 ` [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery Hannes Reinecke
@ 2016-07-14  2:11 ` Martin K. Petersen
  2016-07-25  7:34   ` Johannes Thumshirn
  6 siblings, 1 reply; 20+ messages in thread
From: Martin K. Petersen @ 2016-07-14  2:11 UTC (permalink / raw)
  To: Hannes Reinecke
  Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi

>>>>> "Hannes" == Hannes Reinecke <hare@suse.de> writes:

Hannes> Hi all, When setting up a VN2VN FCoE target there is no real
Hannes> need to run fcoeadm, especially if DCB is disabled.  So this
Hannes> patchset implements a VIP VLAN responder which can be enabled by
Hannes> writing to the sysfs attribute 'fip_vlan_responder'.
Hannes> Additionally there are some fixes for VN2VN mode, most notably
Hannes> the multicast address update when changing modes.

Applied patches 1-4 to 4.8/scsi-queue.

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 5/6] fcoe: implement FIP VLAN responder
  2016-07-04  8:29 ` [PATCH 5/6] fcoe: implement FIP VLAN responder Hannes Reinecke
  2016-07-04 10:05   ` Johannes Thumshirn
@ 2016-07-25  7:31   ` Johannes Thumshirn
  1 sibling, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-25  7:31 UTC (permalink / raw)
  To: Hannes Reinecke
  Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi, Hannes Reinecke

On Mon, Jul 04, 2016 at 10:29:22AM +0200, Hannes Reinecke wrote:
> When running in VN2VN mode there is no central instance which
> would send out any FIP VLAN discovery notifications. So this
> patch adds a new sysfs attribute 'fip_vlan_responder' which
> will activate a FIP VLAN discovery responder.
> 
> Signed-off-by: Hannes Reinecke <hare@suse.com>

Reviewed-by: Johannes Thumshirn <jth@kernel.org>

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery
  2016-07-04  8:29 ` [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery Hannes Reinecke
  2016-07-04 10:18   ` Johannes Thumshirn
@ 2016-07-25  7:32   ` Johannes Thumshirn
  1 sibling, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-25  7:32 UTC (permalink / raw)
  To: Hannes Reinecke
  Cc: Martin K. Petersen, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi, Hannes Reinecke

On Mon, Jul 04, 2016 at 10:29:23AM +0200, Hannes Reinecke wrote:
> FC-BB-6 states:
> FIP protocols shall be performed on a per-VLAN basis. It is
> recommended to use the FIP VLAN discovery protocol on the
> default VLAN.
> 
> Signed-off-by: Hannes Reinecke <hare@suse.com>

Acked-by: Johannes Thumshirn <jth@kernel.org>

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 0/6] fcoe: VN2VN target mode fixes
  2016-07-14  2:11 ` [PATCH 0/6] fcoe: VN2VN target mode fixes Martin K. Petersen
@ 2016-07-25  7:34   ` Johannes Thumshirn
  2016-07-27  4:26     ` Martin K. Petersen
  0 siblings, 1 reply; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-25  7:34 UTC (permalink / raw)
  To: Martin K. Petersen
  Cc: Hannes Reinecke, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi

On Wed, Jul 13, 2016 at 10:11:33PM -0400, Martin K . Petersen wrote:
> >>>>> "Hannes" == Hannes Reinecke <hare@suse.de> writes:
> 
> Hannes> Hi all, When setting up a VN2VN FCoE target there is no real
> Hannes> need to run fcoeadm, especially if DCB is disabled.  So this
> Hannes> patchset implements a VIP VLAN responder which can be enabled by
> Hannes> writing to the sysfs attribute 'fip_vlan_responder'.
> Hannes> Additionally there are some fixes for VN2VN mode, most notably
> Hannes> the multicast address update when changing modes.
> 
> Applied patches 1-4 to 4.8/scsi-queue.

Hi Martin,

I've now Acked patches 5 and 6 as well, Hannes' answers clarified my concerns.
Can you pick 'em up for 4.8 as well?

Thanks,
	Johannes

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 0/6] fcoe: VN2VN target mode fixes
  2016-07-25  7:34   ` Johannes Thumshirn
@ 2016-07-27  4:26     ` Martin K. Petersen
  2016-07-27  7:23       ` Johannes Thumshirn
  0 siblings, 1 reply; 20+ messages in thread
From: Martin K. Petersen @ 2016-07-27  4:26 UTC (permalink / raw)
  To: Johannes Thumshirn
  Cc: Martin K. Petersen, Hannes Reinecke, Johannes Thumshirn,
	Christoph Hellwig, James Bottomley, linux-scsi

>>>>> "Johannes" == Johannes Thumshirn <jthumshirn@suse.de> writes:

Johannes> I've now Acked patches 5 and 6 as well, Hannes' answers
Johannes> clarified my concerns.  Can you pick 'em up for 4.8 as well?

Done!

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 0/6] fcoe: VN2VN target mode fixes
  2016-07-27  4:26     ` Martin K. Petersen
@ 2016-07-27  7:23       ` Johannes Thumshirn
  0 siblings, 0 replies; 20+ messages in thread
From: Johannes Thumshirn @ 2016-07-27  7:23 UTC (permalink / raw)
  To: Martin K. Petersen
  Cc: Hannes Reinecke, Johannes Thumshirn, Christoph Hellwig,
	James Bottomley, linux-scsi

On Wed, Jul 27, 2016 at 12:26:38AM -0400, Martin K . Petersen wrote:
> >>>>> "Johannes" == Johannes Thumshirn <jthumshirn@suse.de> writes:
> 
> Johannes> I've now Acked patches 5 and 6 as well, Hannes' answers
> Johannes> clarified my concerns.  Can you pick 'em up for 4.8 as well?
> 
> Done!

Thanks a lot.

-- 
Johannes Thumshirn                                          Storage
jthumshirn@suse.de                                +49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
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

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2016-07-27  7:23 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-04  8:29 [PATCH 0/6] fcoe: VN2VN target mode fixes Hannes Reinecke
2016-07-04  8:29 ` [PATCH 1/6] fc_fip: Update to latest FC-BB-6 draft Hannes Reinecke
2016-07-04 10:12   ` Johannes Thumshirn
2016-07-04  8:29 ` [PATCH 2/6] fcoe: use enum for fip_mode Hannes Reinecke
2016-07-04 10:15   ` Johannes Thumshirn
2016-07-04  8:29 ` [PATCH 3/6] fcoe: fcoe->realdev is always set Hannes Reinecke
2016-07-04 10:16   ` Johannes Thumshirn
2016-07-04  8:29 ` [PATCH 4/6] fcoe: Update multicast addresses on FIP mode change Hannes Reinecke
2016-07-04 10:16   ` Johannes Thumshirn
2016-07-04  8:29 ` [PATCH 5/6] fcoe: implement FIP VLAN responder Hannes Reinecke
2016-07-04 10:05   ` Johannes Thumshirn
2016-07-04 11:22     ` Hannes Reinecke
2016-07-25  7:31   ` Johannes Thumshirn
2016-07-04  8:29 ` [PATCH 6/6] fcoe: Use default VLAN for FIP VLAN discovery Hannes Reinecke
2016-07-04 10:18   ` Johannes Thumshirn
2016-07-25  7:32   ` Johannes Thumshirn
2016-07-14  2:11 ` [PATCH 0/6] fcoe: VN2VN target mode fixes Martin K. Petersen
2016-07-25  7:34   ` Johannes Thumshirn
2016-07-27  4:26     ` Martin K. Petersen
2016-07-27  7:23       ` Johannes Thumshirn

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.