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 <[EMAIL PROTECTED]>
    Signed-off-by: Moni Shoua <[EMAIL PROTECTED]>

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;
+               }
+ 

_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to