diff -urpN infiniband/ulp/ipoib/ipoib_main.c infiniband-init/ulp/ipoib/ipoib_main.c
--- infiniband/ulp/ipoib/ipoib_main.c	2005-02-24 18:06:15.000000000 +0000
+++ infiniband-init/ulp/ipoib/ipoib_main.c	2005-02-24 18:07:37.000000000 +0000
@@ -348,6 +348,7 @@ static struct ipoib_path *path_rec_creat
 
 	path->dev = dev;
 	path->pathrec.dlid = 0;
+	path->ah = NULL;
 
 	skb_queue_head_init(&path->queue);
 
@@ -450,8 +451,8 @@ static void neigh_add_path(struct sk_buf
 err:
 	*to_ipoib_neigh(skb->dst->neighbour) = NULL;
 	list_del(&neigh->list);
-	kfree(neigh);
 	neigh->neighbour->ops->destructor = NULL;
+	kfree(neigh);
 
 	++priv->stats.tx_dropped;
 	dev_kfree_skb_any(skb);
@@ -673,6 +674,7 @@ static void ipoib_neigh_destructor(struc
 			ipoib_put_ah(neigh->ah);
 		list_del(&neigh->list);
 		*to_ipoib_neigh(n) = NULL;
+		n->ops->destructor = NULL;
 		kfree(neigh);
 	}
 
