From patchwork Thu Sep 24 20:59:28 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Feldman X-Patchwork-Id: 522587 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 358C21401AD for ; Fri, 25 Sep 2015 06:56:48 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=HkhejyXs; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754147AbbIXU4n (ORCPT ); Thu, 24 Sep 2015 16:56:43 -0400 Received: from mail-pa0-f48.google.com ([209.85.220.48]:33598 "EHLO mail-pa0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753897AbbIXU4l (ORCPT ); Thu, 24 Sep 2015 16:56:41 -0400 Received: by pacex6 with SMTP id ex6so83046349pac.0 for ; Thu, 24 Sep 2015 13:56:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=KkNTaggnoO3VIUOfRSHtxXnYPV2wmwsGy1vk2mffzAU=; b=HkhejyXs/ThzVqals8S3LREnlWbQ51xLKd1K1XeKSOjCVVGeUUpdGsK4jd2QEjZfyJ kEJ25aYkbvqFJLL4N62/RdAejEhurAsEEJ5JiZLcFjznDVkTQemOWWGevVi9DJeKZu3g mY/PyoGkSm9FLGAEV4I4qr0ESJZ8BxE+BV+IKy4kcJ0z+iomPWOwW0PrLJxlIv1ONru6 32RYnhhZ3Mbxk/8SiWz7ZONZa6M0YiZy4YHE51BuIYN0dnBzXke5a912bT5r8faTjceI NLhtZz1gYxXRYLkTCw/CacDx4X+iSj61bDmfIqboqCHnp211Gt6nmC+nrBh8SO1M76Uh KKSg== X-Received: by 10.67.7.137 with SMTP id dc9mr2130444pad.116.1443128195486; Thu, 24 Sep 2015 13:56:35 -0700 (PDT) Received: from rocker1.rocker.net ([199.58.98.143]) by smtp.gmail.com with ESMTPSA id jv5sm102262pbc.47.2015.09.24.13.56.34 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 24 Sep 2015 13:56:34 -0700 (PDT) From: sfeldma@gmail.com To: netdev@vger.kernel.org Cc: jiri@resnulli.us, siva.mannem.lnx@gmail.com, pjonnala@broadcom.com, stephen@networkplumber.org, roopa@cumulusnetworks.com, andrew@lunn.ch, f.fainelli@gmail.com, vivien.didelot@savoirfairelinux.com Subject: [PATCH net-next 2/4] switchdev: skip over ports returning -EOPNOTSUPP when recursing ports Date: Thu, 24 Sep 2015 13:59:28 -0700 Message-Id: <1443128370-27353-3-git-send-email-sfeldma@gmail.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1443128370-27353-1-git-send-email-sfeldma@gmail.com> References: <1443128370-27353-1-git-send-email-sfeldma@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Scott Feldman This allows us to recurse over all the ports, skipping over unsupporting ports. Without the change, the recursion would stop at first unsupported port. Signed-off-by: Scott Feldman Acked-by: Premkumar Jonnala --- include/net/switchdev.h | 1 + net/switchdev/switchdev.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/net/switchdev.h b/include/net/switchdev.h index 54b2faa..22a6dbe 100644 --- a/include/net/switchdev.h +++ b/include/net/switchdev.h @@ -15,6 +15,7 @@ #include #define SWITCHDEV_F_NO_RECURSE BIT(0) +#define SWITCHDEV_F_SKIP_EOPNOTSUPP BIT(1) enum switchdev_trans { SWITCHDEV_TRANS_NONE, diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c index fda38f8..5c30da0 100644 --- a/net/switchdev/switchdev.c +++ b/net/switchdev/switchdev.c @@ -73,7 +73,7 @@ static int __switchdev_port_attr_set(struct net_device *dev, return ops->switchdev_port_attr_set(dev, attr); if (attr->flags & SWITCHDEV_F_NO_RECURSE) - return err; + goto done; /* Switch device port(s) may be stacked under * bond/team/vlan dev, so recurse down to set attr on @@ -82,10 +82,17 @@ static int __switchdev_port_attr_set(struct net_device *dev, netdev_for_each_lower_dev(dev, lower_dev, iter) { err = __switchdev_port_attr_set(lower_dev, attr); + if (err == -EOPNOTSUPP && + attr->flags & SWITCHDEV_F_SKIP_EOPNOTSUPP) + continue; if (err) break; } +done: + if (err == -EOPNOTSUPP && attr->flags & SWITCHDEV_F_SKIP_EOPNOTSUPP) + err = 0; + return err; }