dsa: fix master interface allmulti/promisc handling
authorLennert Buytenhek <buytenh@marvell.com>
Tue, 11 Nov 2008 05:53:12 +0000 (21:53 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 11 Nov 2008 05:53:12 +0000 (21:53 -0800)
commitdf02c6ff2e3937379b31ea161b53229134fe92f7
tree93e76bcd230de65599709b5520bd53c337ebd432
parent14ee6742b1b5df275cd2d771b4562b4f808c9419
dsa: fix master interface allmulti/promisc handling

Before commit b6c40d68ff6498b7f63ddf97cf0aa818d748dee7 ("net: only
invoke dev->change_rx_flags when device is UP"), the dsa driver could
sort-of get away with only fiddling with the master interface's
allmulti/promisc counts in ->change_rx_flags() and not touching them
in ->open() or ->stop().  After this commit (note that it was merged
almost simultaneously with the dsa patches, which is why this wasn't
caught initially), the breakage that was already there became more
apparent.

Since it makes no sense to keep the master interface's allmulti or
promisc count pinned for a slave interface that is down, copy the vlan
driver's sync logic (which does exactly what we want) over to dsa to
fix this.

Bug report from Dirk Teurlings <dirk@upexia.nl> and Peter van Valderen
<linux@ddcrew.com>.

Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Tested-by: Dirk Teurlings <dirk@upexia.nl>
Tested-by: Peter van Valderen <linux@ddcrew.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/slave.c