Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 55462cf3 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

vlan: fix bond/team enslave of vlan challenged slave/port



In vlan_uses_dev() check for number of vlan devs rather than existence
of vlan_info. The reason is that vlan id 0 is there without appropriate
vlan dev on it by default which prevented from enslaving vlan challenged
dev.

Reported-by: default avatarJon Stanley <jstanley@rmrf.net>
Signed-off-by: default avatarJiri Pirko <jiri@resnulli.us>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 73b7656c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1519,7 +1519,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
	/* no need to lock since we're protected by rtnl_lock */
	if (slave_dev->features & NETIF_F_VLAN_CHALLENGED) {
		pr_debug("%s: NETIF_F_VLAN_CHALLENGED\n", slave_dev->name);
		if (bond_vlan_used(bond)) {
		if (vlan_uses_dev(bond_dev)) {
			pr_err("%s: Error: cannot enslave VLAN challenged slave %s on VLAN enabled bond %s\n",
			       bond_dev->name, slave_dev->name, bond_dev->name);
			return -EPERM;
+8 −1
Original line number Diff line number Diff line
@@ -366,6 +366,13 @@ EXPORT_SYMBOL(vlan_vids_del_by_dev);

bool vlan_uses_dev(const struct net_device *dev)
{
	return rtnl_dereference(dev->vlan_info) ? true : false;
	struct vlan_info *vlan_info;

	ASSERT_RTNL();

	vlan_info = rtnl_dereference(dev->vlan_info);
	if (!vlan_info)
		return false;
	return vlan_info->grp.nr_vlan_devs ? true : false;
}
EXPORT_SYMBOL(vlan_uses_dev);