diff -urN infiniband/ulp/ipoib/ipoib_ib.c infiniband-rx_error/ulp/ipoib/ipoib_ib.c
--- infiniband/ulp/ipoib/ipoib_ib.c	2006-03-26 11:57:15.853035656 -0800
+++ infiniband-rx_error/ulp/ipoib/ipoib_ib.c	2006-03-26 15:05:53.491493088 -0800
@@ -196,11 +196,9 @@
 					ipoib_warn(priv, "failed recv event "
 						   "(status=%d, wrid=%d vend_err %x)\n",
 						   wc->status, wr_id, wc->vendor_err);
-				dma_unmap_single(priv->ca->dma_device, addr,
-						 IPOIB_BUF_SIZE, DMA_FROM_DEVICE);
-				dev_kfree_skb_any(skb);
-				priv->rx_ring[wr_id].skb = NULL;
-				return;
+				++priv->stats.rx_errors;
+				/* ignore this packet, reuse the old buffer */
+				goto repost;
 			}
 
 			/*
