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 12:47:53.946175296 -0800
@@ -196,10 +196,11 @@
 					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;
+				++priv->stats.rx_errors;
+				/* ignore this packet, reuse the old buffer */
+				if (unlikely(ipoib_ib_post_receive(dev, wr_id)))
+					ipoib_warn(priv, "ipoib_ib_post_receive failed "
+						   "for buf %d\n", wr_id);
 				return;
 			}
 
