Revision b6c40d68ff6498b7f63ddf97cf0aa818d748dee7 authored by Patrick McHardy on 07 October 2008, 22:26:48 UTC, committed by David S. Miller on 07 October 2008, 22:26:48 UTC
Jesper Dangaard Brouer <hawk@comx.dk> reported a bug when setting a VLAN
device down that is in promiscous mode:

When the VLAN device is set down, the promiscous count on the real
device is decremented by one by vlan_dev_stop(). When removing the
promiscous flag from the VLAN device afterwards, the promiscous
count on the real device is decremented a second time by the
vlan_change_rx_flags() callback.

The root cause for this is that the ->change_rx_flags() callback is
invoked while the device is down. The synchronization is meant to mirror
the behaviour of the ->set_rx_mode callbacks, meaning the ->open function
is responsible for doing a full sync on open, the ->close() function is
responsible for doing full cleanup on ->stop() and ->change_rx_flags()
is meant to do incremental changes while the device is UP.

Only invoke ->change_rx_flags() while the device is UP to provide the
intended behaviour.

Tested-by: Jesper Dangaard Brouer <jdb@comx.dk>

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 859f4c7
History
File Mode Size
Makefile -rw-r--r-- 335 bytes
compat.c -rw-r--r-- 17.0 KB
compat_mq.c -rw-r--r-- 4.0 KB
ipc_sysctl.c -rw-r--r-- 7.0 KB
ipcns_notifier.c -rw-r--r-- 2.2 KB
mqueue.c -rw-r--r-- 30.0 KB
msg.c -rw-r--r-- 20.8 KB
msgutil.c -rw-r--r-- 2.3 KB
namespace.c -rw-r--r-- 2.5 KB
sem.c -rw-r--r-- 33.7 KB
shm.c -rw-r--r-- 25.1 KB
util.c -rw-r--r-- 23.0 KB
util.h -rw-r--r-- 4.5 KB

back to top