From: Smart Weblications GmbH - Florian Wiessner <f.wiessner@smart-weblications.de>
To: davem@davemloft.net, liquidhorse@gmail.com
Cc: andy@greyhouse.net, fubar@us.ibm.com,
LKML <linux-kernel@vger.kernel.org>,
stable@vger.kernel.org, nikolay@redhat.com, vfalico@redhat.com,
gregkh@linuxfoundation.org
Subject: https://lkml.org/lkml/2013/2/1/531
Date: Wed, 22 May 2013 13:36:09 +0200 [thread overview]
Message-ID: <519CADA9.9060909@smart-weblications.de> (raw)
Hi,
why is this patch still not backported to 3.4?
I today tried 3.4.46 from kernel.org, but the patch STILL seems _NOT_ included?
WHY IS THAT?
====== 3.4 Series ======
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 */
--
Mit freundlichen Grüßen,
Florian Wiessner
Smart Weblications GmbH
Martinsberger Str. 1
D-95119 Naila
fon.: +49 9282 9638 200
fax.: +49 9282 9638 205
24/7: +49 900 144 000 00 - 0,99 EUR/Min*
http://www.smart-weblications.de
--
Sitz der Gesellschaft: Naila
Geschäftsführer: Florian Wiessner
HRB-Nr.: HRB 3840 Amtsgericht Hof
*aus dem dt. Festnetz, ggf. abweichende Preise aus dem Mobilfunknetz
WARNING: multiple messages have this Message-ID (diff)
From: Smart Weblications GmbH - Florian Wiessner <f.wiessner@smart-weblications.de>
To: davem@davemloft.net, liquidhorse@gmail.com
Cc: andy@greyhouse.net, fubar@us.ibm.com,
LKML <linux-kernel@vger.kernel.org>,
stable@vger.kernel.org, nikolay@redhat.com, vfalico@redhat.com,
gregkh@linuxfoundation.org
Subject: https://lkml.org/lkml/2013/2/1/531
Date: Wed, 22 May 2013 13:36:09 +0200 [thread overview]
Message-ID: <519CADA9.9060909@smart-weblications.de> (raw)
Hi,
why is this patch still not backported to 3.4?
I today tried 3.4.46 from kernel.org, but the patch STILL seems _NOT_ included?
WHY IS THAT?
====== 3.4 Series ======
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 */
--
Mit freundlichen Grᅵᅵen,
Florian Wiessner
Smart Weblications GmbH
Martinsberger Str. 1
D-95119 Naila
fon.: +49 9282 9638 200
fax.: +49 9282 9638 205
24/7: +49 900 144 000 00 - 0,99 EUR/Min*
http://www.smart-weblications.de
--
Sitz der Gesellschaft: Naila
Geschᅵftsfᅵhrer: Florian Wiessner
HRB-Nr.: HRB 3840 Amtsgericht Hof
*aus dem dt. Festnetz, ggf. abweichende Preise aus dem Mobilfunknetz
next reply other threads:[~2013-05-22 11:43 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-22 11:36 Smart Weblications GmbH - Florian Wiessner [this message]
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 ` https://lkml.org/lkml/2013/2/1/531 Matthew O'Connor
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=519CADA9.9060909@smart-weblications.de \
--to=f.wiessner@smart-weblications.de \
--cc=andy@greyhouse.net \
--cc=davem@davemloft.net \
--cc=fubar@us.ibm.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=liquidhorse@gmail.com \
--cc=nikolay@redhat.com \
--cc=stable@vger.kernel.org \
--cc=vfalico@redhat.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.