summaryrefslogtreecommitdiff
path: root/net/core/dev_mcast.c
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2007-06-30 13:35:52 -0700
committerDavid S. Miller <davem@sunset.davemloft.net>2007-07-10 22:16:23 -0700
commit61cbc2fca6335be52788773b21efdc52a2750924 (patch)
tree489e6a9571c7fabd49dcff384dd634635fe66555 /net/core/dev_mcast.c
parentd62733c8e437fdb58325617c4b3331769ba82d70 (diff)
downloadkernel-common-61cbc2fca6335be52788773b21efdc52a2750924.tar.gz
kernel-common-61cbc2fca6335be52788773b21efdc52a2750924.tar.bz2
kernel-common-61cbc2fca6335be52788773b21efdc52a2750924.zip
[NET]: Fix secondary unicast/multicast address count maintenance
When a reference to an existing address is increased or decreased without hitting zero, the address count is incorrectly adjusted. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev_mcast.c')
-rw-r--r--net/core/dev_mcast.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/net/core/dev_mcast.c b/net/core/dev_mcast.c
index 5cc9b448c443..aa38100601fb 100644
--- a/net/core/dev_mcast.c
+++ b/net/core/dev_mcast.c
@@ -72,10 +72,9 @@ int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl)
int err;
netif_tx_lock_bh(dev);
- err = __dev_addr_delete(&dev->mc_list, addr, alen, glbl);
+ err = __dev_addr_delete(&dev->mc_list, &dev->mc_count,
+ addr, alen, glbl);
if (!err) {
- dev->mc_count--;
-
/*
* We have altered the list, so the card
* loaded filter is now wrong. Fix it
@@ -96,11 +95,9 @@ int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl)
int err;
netif_tx_lock_bh(dev);
- err = __dev_addr_add(&dev->mc_list, addr, alen, glbl);
- if (!err) {
- dev->mc_count++;
+ err = __dev_addr_add(&dev->mc_list, &dev->mc_count, addr, alen, glbl);
+ if (!err)
__dev_set_rx_mode(dev);
- }
netif_tx_unlock_bh(dev);
return err;
}