aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilly Tarreau <w@1wt.eu>2009-07-19 22:55:20 +0200
committerWilly Tarreau <w@1wt.eu>2009-07-19 22:55:20 +0200
commitd1fa4c2ee5f1d17d4d819ffe0b489bc309089b0b (patch)
treebc8987dac52d05f5d65a117e8db9cc616c239550
parent26e064952f04874c98f80176417ffd3bc4967aec (diff)
downloadlinux-2.4-d1fa4c2ee5f1d17d4d819ffe0b489bc309089b0b.tar.gz
r8169: avoid rx descriptors leak when receiving erroneous frames
When a frame is received with the RxRES bit, we must recycle its descriptor otherwise it's definitely lost. This causes the driver to stop receiving after a certain amount of receive errors. Signed-off-by: Willy Tarreau <w@1wt.eu>
-rw-r--r--drivers/net/r8169.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index c46f0dd3c118bf..17127f48711bfc 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -1481,6 +1481,9 @@ rtl8169_rx_interrupt(struct net_device *dev, struct rtl8169_private *tp,
tp->stats.rx_length_errors++;
if (status & RxCRC)
tp->stats.rx_crc_errors++;
+
+ rtl8169_return_to_asic(tp->RxDescArray + entry);
+ continue;
} else {
struct RxDesc *desc = tp->RxDescArray + entry;
struct sk_buff *skb = tp->Rx_skbuff[entry];