From patchwork Sun Oct 14 14:30:56 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 191363 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id B46962C0096 for ; Mon, 15 Oct 2012 01:31:07 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753383Ab2JNObD (ORCPT ); Sun, 14 Oct 2012 10:31:03 -0400 Received: from mail-wi0-f170.google.com ([209.85.212.170]:45465 "EHLO mail-wi0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753354Ab2JNObB (ORCPT ); Sun, 14 Oct 2012 10:31:01 -0400 Received: by mail-wi0-f170.google.com with SMTP id hm2so54925wib.1 for ; Sun, 14 Oct 2012 07:30:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:x-gm-message-state; bh=wYKqNLONuGmzoKQ0I3YWT2ccbHLBqOAbJJcPbxzQmAM=; b=JbWnlFMmwPHzOuEUgH5P9AI7q3qvR6iY/t027WzNRIA1i/9cg5ZmcHIAvBq/wTZqVi VK1aR1SWlFpsGvw6Lg7ZhsMDegSbScQ3RkfoQ9fLi/p+TfhYdg8yx/K7inCQF5OaDtsB pZvjLpn3vzf1yRf/Ea3hp2a29kU6yDoQopjlZ50zY3CjHRpDRpVfCy68z/RMQNUZtH8q RGz63Lb4+DFPT/RssoAv6MBjIdWuqmBXtOfJmojX56wz7o085WaTLqeupso2UIlw0J+f /s2NBvLM4TuMx1c9sK4ewl+JrqElBN7u8oTi1STk2CQhMWjICBY3XBMGmjMB/pdGYF+9 aAEA== Received: by 10.180.104.97 with SMTP id gd1mr17738240wib.4.1350225059280; Sun, 14 Oct 2012 07:30:59 -0700 (PDT) Received: from localhost (sun-0.pirko.cz. [84.16.102.25]) by mx.google.com with ESMTPS id bn7sm10109236wib.8.2012.10.14.07.30.57 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 14 Oct 2012 07:30:58 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, fubar@us.ibm.com, andy@greyhouse.net, kaber@trash.net, jstanley@rmrf.net Subject: [patch net] vlan: fix bond/team enslave of vlan challenged slave/port Date: Sun, 14 Oct 2012 16:30:56 +0200 Message-Id: <1350225056-14144-1-git-send-email-jiri@resnulli.us> X-Mailer: git-send-email 1.7.11.4 X-Gm-Message-State: ALoCoQkfG7rv3ZwEfwJUT/DJCbCPbw+1NWouMtJvrYfbneZNFKnjNrPo4wer09D1C3dAavXSvWxe Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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: Jon Stanley Signed-off-by: Jiri Pirko --- drivers/net/bonding/bond_main.c | 2 +- net/8021q/vlan_core.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index b721902..b2530b0 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -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; diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c index fbbf1fa..65e06ab 100644 --- a/net/8021q/vlan_core.c +++ b/net/8021q/vlan_core.c @@ -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);