]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
fix up queue-3.4/bonding-rlb-mode-of-bond-should-not-alter-arp-originating-via-bridge...
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jun 2013 18:21:12 +0000 (11:21 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jun 2013 18:21:12 +0000 (11:21 -0700)
queue-3.4/bonding-rlb-mode-of-bond-should-not-alter-arp-originating-via-bridge.patch

index 7ddab2fcf7ddddc502a542a8a4d7528c01a4bb18..15f2f04dca00e14f470112194a5d0003aa3ad3e3 100644 (file)
@@ -1,4 +1,4 @@
-From e97ad85630ba172b34ee1ef9ea9f8cbe41bd9498 Mon Sep 17 00:00:00 2001
+From 8f8cfb2ed5a5f6492c66e4eb56ef8360794948de Mon Sep 17 00:00:00 2001
 From: Zheng Li <zheng.x.li@oracle.com>
 Date: Wed, 19 Jun 2013 00:53:47 -0700
 Subject: bonding: rlb mode of bond should not alter ARP originating via bridge
@@ -31,8 +31,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 ---
  drivers/net/bonding/bond_alb.c |    6 ++++++
  drivers/net/bonding/bonding.h  |   13 +++++++++++++
- include/linux/etherdevice.h    |   33 +++++++++++++++++++++++++++++++++
- 3 files changed, 52 insertions(+)
+ 2 files changed, 19 insertions(+)
 
 --- a/drivers/net/bonding/bond_alb.c
 +++ b/drivers/net/bonding/bond_alb.c
@@ -70,7 +69,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 +      struct slave *tmp;
 +
 +      bond_for_each_slave(bond, tmp, i)
-+              if (ether_addr_equal_64bits(mac, tmp->dev->dev_addr))
++              if (!compare_ether_addr_64bits(mac, tmp->dev->dev_addr))
 +                      return tmp;
 +
 +      return NULL;
@@ -78,43 +77,3 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  
  /* exported from bond_main.c */
  extern int bond_net_id;
---- a/include/linux/etherdevice.h
-+++ b/include/linux/etherdevice.h
-@@ -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 */