diff -urpN infiniband/ulp/ipoib/ipoib_multicast.c infiniband-down/ulp/ipoib/ipoib_multicast.c
--- infiniband/ulp/ipoib/ipoib_multicast.c	2005-02-04 16:05:13.000000000 -0800
+++ infiniband-down/ulp/ipoib/ipoib_multicast.c	2005-02-16 15:49:42.000000000 -0800
@@ -790,7 +790,7 @@ void ipoib_mcast_dev_flush(struct net_de
 
 	spin_unlock_irqrestore(&priv->lock, flags);
 
-	list_for_each_entry(mcast, &remove_list, list) {
+	list_for_each_entry_safe(mcast, tmcast, &remove_list, list) {
 		ipoib_mcast_leave(dev, mcast);
 		ipoib_mcast_free(mcast);
 	}
