diff options
author | Dale Farnsworth <dale@farnsworth.org> | 2005-09-01 12:59:23 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-09-05 18:08:30 -0400 |
commit | b1dd9ca177bd2ff5260376dd024dd43eb4631dc7 (patch) | |
tree | b6903b12d4124a6fa835cab4b35db1eb99a6d1aa /drivers | |
parent | e797637f4c1cbcecb2d8f5cfa05b161da1f0b802 (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.c | 6 |
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; |