aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDale Farnsworth <dale@farnsworth.org>2005-09-01 12:59:23 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-09-05 18:08:30 -0400
commitb1dd9ca177bd2ff5260376dd024dd43eb4631dc7 (patch)
treeb6903b12d4124a6fa835cab4b35db1eb99a6d1aa /drivers
parente797637f4c1cbcecb2d8f5cfa05b161da1f0b802 (diff)
[PATCH] mv643xx: fix skb memory leak
This patch fixes an skb memory leak under heavy receive load (whenever the more packets have been received than the NAPI budget allows to be processed). Signed-off-by: Dale Farnsworth <dale@farnsworth.org> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/mv643xx_eth.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c
index fb6b232069d6..ab74d4583c41 100644
--- a/drivers/net/mv643xx_eth.c
+++ b/drivers/net/mv643xx_eth.c
@@ -412,15 +412,13 @@ static int mv643xx_eth_receive_queue(struct net_device *dev)
412 struct pkt_info pkt_info; 412 struct pkt_info pkt_info;
413 413
414#ifdef MV643XX_NAPI 414#ifdef MV643XX_NAPI
415 while (eth_port_receive(mp, &pkt_info) == ETH_OK && budget > 0) { 415 while (budget-- > 0 && eth_port_receive(mp, &pkt_info) == ETH_OK) {
416#else 416#else
417 while (eth_port_receive(mp, &pkt_info) == ETH_OK) { 417 while (eth_port_receive(mp, &pkt_info) == ETH_OK) {
418#endif 418#endif
419 mp->rx_ring_skbs--; 419 mp->rx_ring_skbs--;
420 received_packets++; 420 received_packets++;
421#ifdef MV643XX_NAPI 421
422 budget--;
423#endif
424 /* Update statistics. Note byte count includes 4 byte CRC count */ 422 /* Update statistics. Note byte count includes 4 byte CRC count */
425 stats->rx_packets++; 423 stats->rx_packets++;
426 stats->rx_bytes += pkt_info.byte_cnt; 424 stats->rx_bytes += pkt_info.byte_cnt;