[ewg] [PATCH] IB/IPoIB Check if grat. ARP changed had arrived when working in connected mode
Moni Shoua
monis at voltaire.com
Tue Jan 29 02:44:32 PST 2008
move a little up the code that checks for a situation where the remote GID stored in the ipoib_neigh is
different than the one present in the neighbour (handle Gratuitous ARP) or that a bonding fail over has
happened but the neighbour still has a pointer to an ipoib_neigh created not by the current slave. This
will cause the driver to apply the check also for connected mode neighbours.
This patch was tested against upstream kernel and ofed_kernel.
Signed-off-by: Or Gerlitz <ogerlitz at voltaire.com>
Signed-off-by: Moni Shoua <monis at voltaire.com>
diff --git a/kernel_patches/fixes/ipoib_0120_check_grat_arp_with_cm.patch b/kernel_patches/fixes/ipoib_0120_check_grat_arp_with_cm.patch
new file mode 100644
index 0000000..8b2c32e
--- /dev/null
+++ b/kernel_patches/fixes/ipoib_0120_check_grat_arp_with_cm.patch
@@ -0,0 +1,34 @@
+Index: ofa_kernel-1.3/drivers/infiniband/ulp/ipoib/ipoib_main.c
+===================================================================
+--- ofa_kernel-1.3.orig/drivers/infiniband/ulp/ipoib/ipoib_main.c 2008-01-29 08:55:33.000000000 -0500
++++ ofa_kernel-1.3/drivers/infiniband/ulp/ipoib/ipoib_main.c 2008-01-29 09:17:30.000000000 -0500
+@@ -716,12 +716,7 @@
+
+ neigh = *to_ipoib_neigh(skb->dst->neighbour);
+
+- if (ipoib_cm_get(neigh)) {
+- if (ipoib_cm_up(neigh)) {
+- ipoib_cm_send(dev, skb, ipoib_cm_get(neigh));
+- goto out;
+- }
+- } else if (neigh->ah) {
++ if (neigh->ah)
+ if (unlikely((memcmp(&neigh->dgid.raw,
+ skb->dst->neighbour->ha + 4,
+ sizeof(union ib_gid))) ||
+@@ -742,9 +737,14 @@
+ goto out;
+ }
+
++ if (ipoib_cm_get(neigh)) {
++ if (ipoib_cm_up(neigh)) {
++ ipoib_cm_send(dev, skb, ipoib_cm_get(neigh));
++ goto out;
++ }
++ } else if (neigh->ah) {
+ ipoib_send(dev, skb, neigh->ah,
+ IPOIB_QPN(skb->dst->neighbour->ha));
+-
+ goto out;
+ }
+
More information about the ewg
mailing list