Revision c80ed84e76886487703bf04b38ce10e92e2d6e26 authored by Vladimir Oltean on 16 November 2019, 16:08:25 UTC, committed by David S. Miller on 16 November 2019, 20:23:53 UTC
This sequence of operations:
ip link set dev br0 type bridge vlan_filtering 1
bridge vlan del dev swp2 vid 1
ip link set dev br0 type bridge vlan_filtering 1
ip link set dev br0 type bridge vlan_filtering 0

apparently fails with the message:

[   31.305716] sja1105 spi0.1: Reset switch and programmed static config. Reason: VLAN filtering
[   31.322161] sja1105 spi0.1: Couldn't determine PVID attributes (pvid 0)
[   31.328939] sja1105 spi0.1: Failed to setup VLAN tagging for port 1: -2
[   31.335599] ------------[ cut here ]------------
[   31.340215] WARNING: CPU: 1 PID: 194 at net/switchdev/switchdev.c:157 switchdev_port_attr_set_now+0x9c/0xa4
[   31.349981] br0: Commit of attribute (id=6) failed.
[   31.354890] Modules linked in:
[   31.357942] CPU: 1 PID: 194 Comm: ip Not tainted 5.4.0-rc6-01792-gf4f632e07665-dirty #2062
[   31.366167] Hardware name: Freescale LS1021A
[   31.370437] [<c03144dc>] (unwind_backtrace) from [<c030e184>] (show_stack+0x10/0x14)
[   31.378153] [<c030e184>] (show_stack) from [<c11d1c1c>] (dump_stack+0xe0/0x10c)
[   31.385437] [<c11d1c1c>] (dump_stack) from [<c034c730>] (__warn+0xf4/0x10c)
[   31.392373] [<c034c730>] (__warn) from [<c034c7bc>] (warn_slowpath_fmt+0x74/0xb8)
[   31.399827] [<c034c7bc>] (warn_slowpath_fmt) from [<c11ca204>] (switchdev_port_attr_set_now+0x9c/0xa4)
[   31.409097] [<c11ca204>] (switchdev_port_attr_set_now) from [<c117036c>] (__br_vlan_filter_toggle+0x6c/0x118)
[   31.418971] [<c117036c>] (__br_vlan_filter_toggle) from [<c115d010>] (br_changelink+0xf8/0x518)
[   31.427637] [<c115d010>] (br_changelink) from [<c0f8e9ec>] (__rtnl_newlink+0x3f4/0x76c)
[   31.435613] [<c0f8e9ec>] (__rtnl_newlink) from [<c0f8eda8>] (rtnl_newlink+0x44/0x60)
[   31.443329] [<c0f8eda8>] (rtnl_newlink) from [<c0f89f20>] (rtnetlink_rcv_msg+0x2cc/0x51c)
[   31.451477] [<c0f89f20>] (rtnetlink_rcv_msg) from [<c1008df8>] (netlink_rcv_skb+0xb8/0x110)
[   31.459796] [<c1008df8>] (netlink_rcv_skb) from [<c1008648>] (netlink_unicast+0x17c/0x1f8)
[   31.468026] [<c1008648>] (netlink_unicast) from [<c1008980>] (netlink_sendmsg+0x2bc/0x3b4)
[   31.476261] [<c1008980>] (netlink_sendmsg) from [<c0f43858>] (___sys_sendmsg+0x230/0x250)
[   31.484408] [<c0f43858>] (___sys_sendmsg) from [<c0f44c84>] (__sys_sendmsg+0x50/0x8c)
[   31.492209] [<c0f44c84>] (__sys_sendmsg) from [<c0301000>] (ret_fast_syscall+0x0/0x28)
[   31.500090] Exception stack(0xedf47fa8 to 0xedf47ff0)
[   31.505122] 7fa0:                   00000002 b6f2e060 00000003 beabd6a4 00000000 00000000
[   31.513265] 7fc0: 00000002 b6f2e060 5d6e3213 00000128 00000000 00000001 00000006 000619c4
[   31.521405] 7fe0: 00086078 beabd658 0005edbc b6e7ce68

The reason is the implementation of br_get_pvid:

static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
{
	if (!vg)
		return 0;

	smp_rmb();
	return vg->pvid;
}

Since VID 0 is an invalid pvid from the bridge's point of view, let's
add this check in dsa_8021q_restore_pvid to avoid restoring a pvid that
doesn't really exist.

Fixes: 5f33183b7fdf ("net: dsa: tag_8021q: Restore bridge VLANs when enabling vlan_filtering")
Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent e84fa0a
History
File Mode Size
kasan
Kconfig -rw-r--r-- 24.2 KB
Kconfig.debug -rw-r--r-- 4.7 KB
Makefile -rw-r--r-- 3.8 KB
backing-dev.c -rw-r--r-- 28.4 KB
balloon_compaction.c -rw-r--r-- 8.2 KB
cleancache.c -rw-r--r-- 9.8 KB
cma.c -rw-r--r-- 14.3 KB
cma.h -rw-r--r-- 573 bytes
cma_debug.c -rw-r--r-- 4.5 KB
compaction.c -rw-r--r-- 74.8 KB
debug.c -rw-r--r-- 5.9 KB
debug_page_ref.c -rw-r--r-- 1.4 KB
dmapool.c -rw-r--r-- 13.8 KB
early_ioremap.c -rw-r--r-- 6.8 KB
fadvise.c -rw-r--r-- 5.4 KB
failslab.c -rw-r--r-- 1.4 KB
filemap.c -rw-r--r-- 96.3 KB
frame_vector.c -rw-r--r-- 6.5 KB
frontswap.c -rw-r--r-- 14.2 KB
gup.c -rw-r--r-- 65.8 KB
gup_benchmark.c -rw-r--r-- 2.7 KB
highmem.c -rw-r--r-- 11.7 KB
hmm.c -rw-r--r-- 29.3 KB
huge_memory.c -rw-r--r-- 84.9 KB
hugetlb.c -rw-r--r-- 138.3 KB
hugetlb_cgroup.c -rw-r--r-- 10.9 KB
hwpoison-inject.c -rw-r--r-- 2.8 KB
init-mm.c -rw-r--r-- 1.2 KB
internal.h -rw-r--r-- 17.1 KB
interval_tree.c -rw-r--r-- 3.1 KB
khugepaged.c -rw-r--r-- 54.5 KB
kmemleak-test.c -rw-r--r-- 2.6 KB
kmemleak.c -rw-r--r-- 56.0 KB
ksm.c -rw-r--r-- 89.1 KB
list_lru.c -rw-r--r-- 14.6 KB
maccess.c -rw-r--r-- 6.0 KB
madvise.c -rw-r--r-- 28.7 KB
memblock.c -rw-r--r-- 56.6 KB
memcontrol.c -rw-r--r-- 188.7 KB
memfd.c -rw-r--r-- 7.9 KB
memory-failure.c -rw-r--r-- 52.1 KB
memory.c -rw-r--r-- 125.6 KB
memory_hotplug.c -rw-r--r-- 46.5 KB
mempolicy.c -rw-r--r-- 74.2 KB
mempool.c -rw-r--r-- 15.8 KB
memremap.c -rw-r--r-- 12.2 KB
memtest.c -rw-r--r-- 2.8 KB
migrate.c -rw-r--r-- 76.2 KB
mincore.c -rw-r--r-- 7.5 KB
mlock.c -rw-r--r-- 22.7 KB
mm_init.c -rw-r--r-- 4.8 KB
mmap.c -rw-r--r-- 100.5 KB
mmu_context.c -rw-r--r-- 1.3 KB
mmu_gather.c -rw-r--r-- 6.7 KB
mmu_notifier.c -rw-r--r-- 15.8 KB
mmzone.c -rw-r--r-- 2.4 KB
mprotect.c -rw-r--r-- 15.5 KB
mremap.c -rw-r--r-- 19.4 KB
msync.c -rw-r--r-- 2.7 KB
nommu.c -rw-r--r-- 45.4 KB
oom_kill.c -rw-r--r-- 30.1 KB
page-writeback.c -rw-r--r-- 84.7 KB
page_alloc.c -rw-r--r-- 237.9 KB
page_counter.c -rw-r--r-- 6.6 KB
page_ext.c -rw-r--r-- 10.9 KB
page_idle.c -rw-r--r-- 5.5 KB
page_io.c -rw-r--r-- 10.5 KB
page_isolation.c -rw-r--r-- 9.2 KB
page_owner.c -rw-r--r-- 16.0 KB
page_poison.c -rw-r--r-- 3.0 KB
page_vma_mapped.c -rw-r--r-- 7.6 KB
pagewalk.c -rw-r--r-- 9.2 KB
percpu-internal.h -rw-r--r-- 6.3 KB
percpu-km.c -rw-r--r-- 3.0 KB
percpu-stats.c -rw-r--r-- 5.7 KB
percpu-vm.c -rw-r--r-- 10.3 KB
percpu.c -rw-r--r-- 92.3 KB
pgtable-generic.c -rw-r--r-- 5.3 KB
process_vm_access.c -rw-r--r-- 9.8 KB
readahead.c -rw-r--r-- 16.5 KB
rmap.c -rw-r--r-- 54.0 KB
rodata_test.c -rw-r--r-- 1.3 KB
shmem.c -rw-r--r-- 107.5 KB
shuffle.c -rw-r--r-- 5.7 KB
shuffle.h -rw-r--r-- 1.5 KB
slab.c -rw-r--r-- 105.4 KB
slab.h -rw-r--r-- 19.2 KB
slab_common.c -rw-r--r-- 44.1 KB
slob.c -rw-r--r-- 18.0 KB
slub.c -rw-r--r-- 144.0 KB
sparse-vmemmap.c -rw-r--r-- 6.9 KB
sparse.c -rw-r--r-- 25.2 KB
swap.c -rw-r--r-- 29.9 KB
swap_cgroup.c -rw-r--r-- 5.2 KB
swap_slots.c -rw-r--r-- 9.4 KB
swap_state.c -rw-r--r-- 22.4 KB
swapfile.c -rw-r--r-- 94.8 KB
truncate.c -rw-r--r-- 26.7 KB
usercopy.c -rw-r--r-- 9.5 KB
userfaultfd.c -rw-r--r-- 15.8 KB
util.c -rw-r--r-- 22.0 KB
vmacache.c -rw-r--r-- 2.7 KB
vmalloc.c -rw-r--r-- 89.4 KB
vmpressure.c -rw-r--r-- 13.9 KB
vmscan.c -rw-r--r-- 125.2 KB
vmstat.c -rw-r--r-- 52.1 KB
workingset.c -rw-r--r-- 19.1 KB
z3fold.c -rw-r--r-- 40.7 KB
zbud.c -rw-r--r-- 18.2 KB
zpool.c -rw-r--r-- 11.2 KB
zsmalloc.c -rw-r--r-- 61.9 KB
zswap.c -rw-r--r-- 34.2 KB

back to top