All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Matthew O'Connor" <liquidhorse@gmail.com>
To: f.wiessner@smart-weblications.de
Cc: Greg KH <gregkh@linuxfoundation.org>,
	davem@davemloft.net, andy@greyhouse.net, fubar@us.ibm.com,
	LKML <linux-kernel@vger.kernel.org>,
	stable@vger.kernel.org, nikolay@redhat.com, vfalico@redhat.com,
	zheng.x.li@oracle.com
Subject: Re: https://lkml.org/lkml/2013/2/1/531
Date: Thu, 23 May 2013 08:35:01 -0400	[thread overview]
Message-ID: <519E0CF5.7000308@gmail.com> (raw)
In-Reply-To: <519DEE6E.7060700@smart-weblications.de>

[-- Attachment #1: Type: text/plain, Size: 1023 bytes --]

On 05/23/2013 06:24 AM, Smart Weblications GmbH - Florian Wiessner wrote:
> Hm, i tried to apply it to 3.4.46 but it does not work:
>
> node02:/ocfs2/usr/src/linux-3.4.46# patch -p1 <../bridge-patch-3.4.46
> patching file drivers/net/bonding/bond_alb.c
> Hunk #1 FAILED at 704.
> 1 out of 1 hunk FAILED -- saving rejects to file drivers/net/bonding/bond_alb.c.rej
> patching file drivers/net/bonding/bonding.h
> patching file include/linux/etherdevice.h
> Hunk #1 FAILED at 277.
> 1 out of 1 hunk FAILED -- saving rejects to file include/linux/etherdevice.h.rej
That is extremely odd, considering I applied this to a freshly
downloaded kernel source directly from kernel.org before resubmitting it:

hv11:~/kernel/linux-3.4.46$ patch -p1 <
../balance-alb-patches/balance-alb-3.4.patch
patching file drivers/net/bonding/bond_alb.c
patching file drivers/net/bonding/bonding.h
patching file include/linux/etherdevice.h


Here's the patch as an attachment instead; I suspect it keeps getting
damaged by my method of inclusion.

[-- Attachment #2: balance-alb-3.4.patch --]
[-- Type: text/x-patch, Size: 3137 bytes --]

diff -uprN linux-3.4.28/drivers/net/bonding/bond_alb.c linux-3.4.28-patched/drivers/net/bonding/bond_alb.c
--- linux-3.4.28/drivers/net/bonding/bond_alb.c	2013-01-27 23:51:45.000000000 -0500
+++ linux-3.4.28-patched/drivers/net/bonding/bond_alb.c	2013-01-30 15:37:25.121708311 -0500
@@ -704,6 +704,12 @@ static struct slave *rlb_arp_xmit(struct
 	struct arp_pkt *arp = arp_pkt(skb);
 	struct slave *tx_slave = NULL;
 
+	/* Don't modify or load balance ARPs that do not originate locally
+	 * (e.g.,arrive via a bridge).
+	 */
+	if (!bond_slave_has_mac(bond, arp->mac_src))
+		return NULL;
+
 	if (arp->op_code == htons(ARPOP_REPLY)) {
 		/* the arp must be sent on the selected
 		* rx channel
diff -uprN linux-3.4.28/drivers/net/bonding/bonding.h linux-3.4.28-patched/drivers/net/bonding/bonding.h
--- linux-3.4.28/drivers/net/bonding/bonding.h	2013-01-27 23:51:45.000000000 -0500
+++ linux-3.4.28-patched/drivers/net/bonding/bonding.h	2013-01-30 15:37:25.121708311 -0500
@@ -18,6 +18,7 @@
 #include <linux/timer.h>
 #include <linux/proc_fs.h>
 #include <linux/if_bonding.h>
+#include <linux/etherdevice.h>
 #include <linux/cpumask.h>
 #include <linux/in6.h>
 #include <linux/netpoll.h>
@@ -450,6 +451,18 @@ static inline void bond_destroy_proc_dir
 }
 #endif
 
+static inline struct slave *bond_slave_has_mac(struct bonding *bond,
+					       const u8 *mac)
+{
+	int i = 0;
+	struct slave *tmp;
+
+	bond_for_each_slave(bond, tmp, i)
+		if (ether_addr_equal_64bits(mac, tmp->dev->dev_addr))
+			return tmp;
+
+	return NULL;
+}
 
 /* exported from bond_main.c */
 extern int bond_net_id;
diff -uprN linux-3.4.28/include/linux/etherdevice.h linux-3.4.28-patched/include/linux/etherdevice.h
--- linux-3.4.28/include/linux/etherdevice.h	2013-01-27 23:51:45.000000000 -0500
+++ linux-3.4.28-patched/include/linux/etherdevice.h	2013-01-30 15:37:25.121708311 -0500
@@ -277,4 +277,37 @@ static inline unsigned long compare_ethe
 #endif
 }
 
+/**
+ * ether_addr_equal_64bits - Compare two Ethernet addresses
+ * @addr1: Pointer to an array of 8 bytes
+ * @addr2: Pointer to an other array of 8 bytes
+ *
+ * Compare two Ethernet addresses, returns true if equal, false otherwise.
+ *
+ * The function doesn't need any conditional branches and possibly uses
+ * word memory accesses on CPU allowing cheap unaligned memory reads.
+ * arrays = { byte1, byte2, byte3, byte4, byte5, byte6, pad1, pad2 }
+ *
+ * Please note that alignment of addr1 & addr2 are only guaranteed to be 16 bits.
+ */
+
+static inline bool ether_addr_equal_64bits(const u8 addr1[6+2],
+                                           const u8 addr2[6+2])
+{
+#ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+        unsigned long fold = ((*(unsigned long *)addr1) ^
+                              (*(unsigned long *)addr2));
+
+        if (sizeof(fold) == 8)
+                return zap_last_2bytes(fold) == 0;
+
+        fold |= zap_last_2bytes((*(unsigned long *)(addr1 + 4)) ^
+                                (*(unsigned long *)(addr2 + 4)));
+        return fold == 0;
+#else
+        return ether_addr_equal(addr1, addr2);
+#endif
+}
+
+
 #endif	/* _LINUX_ETHERDEVICE_H */

  reply	other threads:[~2013-05-23 12:35 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-22 11:36 https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 11:36 ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 13:57 ` https://lkml.org/lkml/2013/2/1/531 Greg KH
2013-05-22 16:16   ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 16:16     ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 16:23     ` https://lkml.org/lkml/2013/2/1/531 Greg KH
2013-05-22 18:16       ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 18:16         ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 19:06         ` https://lkml.org/lkml/2013/2/1/531 Greg KH
2013-05-22 19:35           ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 19:35             ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 20:04             ` https://lkml.org/lkml/2013/2/1/531 Greg KH
2013-05-22 21:26               ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 21:26                 ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 21:54                 ` https://lkml.org/lkml/2013/2/1/531 Jay Vosburgh
2013-05-22 22:24                   ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 22:24                     ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-22 22:32                   ` https://lkml.org/lkml/2013/2/1/531 Greg KH
2013-05-22 23:17                 ` https://lkml.org/lkml/2013/2/1/531 Matthew O'Connor
2013-05-23 10:24                   ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-23 10:24                     ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-23 12:35                     ` Matthew O'Connor [this message]
2013-05-23 13:36                       ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-23 13:36                         ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-23 12:46                     ` https://lkml.org/lkml/2013/2/1/531 Matthew O'Connor
2013-05-29  1:01                       ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-29  1:01                         ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-05-29  1:10                         ` https://lkml.org/lkml/2013/2/1/531 David Miller
2013-05-29  1:15                         ` https://lkml.org/lkml/2013/2/1/531 Greg KH
2013-06-13  1:15                   ` https://lkml.org/lkml/2013/2/1/531 Ben Hutchings
2013-06-18 11:47                     ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-06-18 17:23                       ` https://lkml.org/lkml/2013/2/1/531 Matthew O'Connor
2013-06-18 17:23                         ` https://lkml.org/lkml/2013/2/1/531 Matthew O'Connor
2013-06-20 15:59                         ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner
2013-06-20 15:59                           ` https://lkml.org/lkml/2013/2/1/531 Smart Weblications GmbH - Florian Wiessner

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=519E0CF5.7000308@gmail.com \
    --to=liquidhorse@gmail.com \
    --cc=andy@greyhouse.net \
    --cc=davem@davemloft.net \
    --cc=f.wiessner@smart-weblications.de \
    --cc=fubar@us.ibm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nikolay@redhat.com \
    --cc=stable@vger.kernel.org \
    --cc=vfalico@redhat.com \
    --cc=zheng.x.li@oracle.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.