diff options
author | Willy Tarreau <w@1wt.eu> | 2009-07-19 22:55:20 +0200 |
---|---|---|
committer | Willy Tarreau <w@1wt.eu> | 2009-07-19 22:55:20 +0200 |
commit | d1fa4c2ee5f1d17d4d819ffe0b489bc309089b0b (patch) | |
tree | bc8987dac52d05f5d65a117e8db9cc616c239550 | |
parent | 26e064952f04874c98f80176417ffd3bc4967aec (diff) | |
download | linux-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.c | 3 |
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]; |