<br><font size=2 face="sans-serif">Hi, Michael,</font>
<br>
<br><font size=2 face="sans-serif">What's the current status of this patch?</font>
<br>
<br><font size=2 face="sans-serif">I kept hitting the panic when bring
the interface up and down. I went through the neighbour and ipoib_neigh
code. I think it's not necessary to patch net/core/neighbour. </font>
<br>
<br><font size=2 face="sans-serif">The reason we hit this problem is neighbour
won't have a pointer to ipoib_neigh if path_free() or mcast_free() being
called by the time neighbour has been freed. (ipoib_neigh always has a
pointer to a neighbour). </font>
<br>
<br><font size=2 face="sans-serif">If neigh_destructor() gets called in
this context, in ipoib_neigh_destructor() if ipoib_neigh is NULL it does
nothing. So removing neigh->neighbour->ops->destructor = NULL
in kfree(neigh) is sufficient to fix this problem. How do you think?</font>
<br>
<br><font size=2 face="sans-serif">Here is the patch I used for testing.</font>
<br>
<br><font size=2 face="sans-serif">diff -urN infiniband/ulp/ipoib/ipoib_main.c
infiniband-patch/ulp/ipoib/ipoib_main.c<br>
--- infiniband/ulp/ipoib/ipoib_main.c        2006-02-01
13:45:43.000000000 -0800<br>
+++ infiniband-patch/ulp/ipoib/ipoib_main.c        2006-02-16
11:02:24.902458152 -0800<br>
@@ -247,7 +247,6 @@<br>
                 if
(neigh->ah)<br>
                  
      ipoib_put_ah(neigh->ah);<br>
                 *to_ipoib_neigh(neigh->neighbour)
= NULL;<br>
-                neigh->neighbour->ops->destructor
= NULL;<br>
                 kfree(neigh);<br>
         }<br>
 <br>
@@ -530,7 +529,6 @@<br>
 err:<br>
         *to_ipoib_neigh(skb->dst->neighbour)
= NULL;<br>
         list_del(&neigh->list);<br>
-        neigh->neighbour->ops->destructor
= NULL;<br>
         kfree(neigh);<br>
 <br>
         ++priv->stats.tx_dropped;<br>
diff -urN infiniband/ulp/ipoib/ipoib_multicast.c infiniband-patch/ulp/ipoib/ipoib_multicast.c<br>
--- infiniband/ulp/ipoib/ipoib_multicast.c        2006-02-16
11:00:40.379348080 -0800<br>
+++ infiniband-patch/ulp/ipoib/ipoib_multicast.c        2006-02-16
11:02:33.225192904 -0800<br>
@@ -115,7 +115,6 @@<br>
                 if
(neigh->ah)<br>
                  
      ipoib_put_ah(neigh->ah);<br>
                 *to_ipoib_neigh(neigh->neighbour)
= NULL;<br>
-                neigh->neighbour->ops->destructor
= NULL;<br>
                 kfree(neigh);</font>
<div>
<br><font size=2 face="sans-serif">         }<br>
 <br>
Thanks<br>
Shirley Ma<br>
IBM Linux Technology Center<br>
15300 SW Koll Parkway<br>
Beaverton, OR 97006-6063<br>
Phone(Fax): (503) 578-7638</font></div>