diff mbox

[net-next,v2] switchdev: fix BUG when port driver doesn't support set attr op

Message ID 1434035941-13665-1-git-send-email-sfeldma@gmail.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Scott Feldman June 11, 2015, 3:19 p.m. UTC
From: Scott Feldman <sfeldma@gmail.com>

Fix a BUG_ON() where CONFIG_NET_SWITCHDEV is set but the driver for a
bridged port does not support switchdev_port_attr_set op.  Don't BUG_ON()
if -EOPNOTSUPP is returned.

Also change BUG_ON() to netdev_err since this is a normal error path and
does not warrant the use of BUG_ON(), which is reserved for unrecoverable
errs.

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
Reported-by: Brenden Blanco <bblanco@plumgrid.com>
---
 net/switchdev/switchdev.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Brenden Blanco June 11, 2015, 5:15 p.m. UTC | #1
On Thu, Jun 11, 2015 at 8:19 AM,  <sfeldma@gmail.com> wrote:
> From: Scott Feldman <sfeldma@gmail.com>
>
> Fix a BUG_ON() where CONFIG_NET_SWITCHDEV is set but the driver for a
> bridged port does not support switchdev_port_attr_set op.  Don't BUG_ON()
> if -EOPNOTSUPP is returned.
>
> Also change BUG_ON() to netdev_err since this is a normal error path and
> does not warrant the use of BUG_ON(), which is reserved for unrecoverable
> errs.
>
> Signed-off-by: Scott Feldman <sfeldma@gmail.com>
> Reported-by: Brenden Blanco <bblanco@plumgrid.com>
> ---
>  net/switchdev/switchdev.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
> index e008057..ecd1b3f 100644
> --- a/net/switchdev/switchdev.c
> +++ b/net/switchdev/switchdev.c
> @@ -103,7 +103,9 @@ static void switchdev_port_attr_set_work(struct work_struct *work)
>
>         rtnl_lock();
>         err = switchdev_port_attr_set(asw->dev, &asw->attr);
> -       BUG_ON(err);
> +       if (err && err != -EOPNOTSUPP)
> +               netdev_err(asw->dev, "failed (err=%d) to set attribute (id=%d)\n",
> +                          err, asw->attr.id);
>         rtnl_unlock();
>
>         dev_put(asw->dev);
> --
> 1.7.10.4
>

I just tried this patch against the original test case, and this one
works well for me. Thanks!
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jiri Pirko June 12, 2015, 5:54 a.m. UTC | #2
Thu, Jun 11, 2015 at 05:19:01PM CEST, sfeldma@gmail.com wrote:
>From: Scott Feldman <sfeldma@gmail.com>
>
>Fix a BUG_ON() where CONFIG_NET_SWITCHDEV is set but the driver for a
>bridged port does not support switchdev_port_attr_set op.  Don't BUG_ON()
>if -EOPNOTSUPP is returned.
>
>Also change BUG_ON() to netdev_err since this is a normal error path and
>does not warrant the use of BUG_ON(), which is reserved for unrecoverable
>errs.
>
>Signed-off-by: Scott Feldman <sfeldma@gmail.com>
>Reported-by: Brenden Blanco <bblanco@plumgrid.com>

Acked-by: Jiri Pirko <jiri@resnulli.us>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Andy Gospodarek June 12, 2015, 5:17 p.m. UTC | #3
On Thu, Jun 11, 2015 at 08:19:01AM -0700, sfeldma@gmail.com wrote:
> From: Scott Feldman <sfeldma@gmail.com>
> 
> Fix a BUG_ON() where CONFIG_NET_SWITCHDEV is set but the driver for a
> bridged port does not support switchdev_port_attr_set op.  Don't BUG_ON()
> if -EOPNOTSUPP is returned.
> 
> Also change BUG_ON() to netdev_err since this is a normal error path and
> does not warrant the use of BUG_ON(), which is reserved for unrecoverable
> errs.
> 
> Signed-off-by: Scott Feldman <sfeldma@gmail.com>
> Reported-by: Brenden Blanco <bblanco@plumgrid.com>

This is less aggressive -- good call.

Acked-by: Andy Gospodarek <gospo@cumulusnetworks.com>

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
index e008057..ecd1b3f 100644
--- a/net/switchdev/switchdev.c
+++ b/net/switchdev/switchdev.c
@@ -103,7 +103,9 @@  static void switchdev_port_attr_set_work(struct work_struct *work)
 
 	rtnl_lock();
 	err = switchdev_port_attr_set(asw->dev, &asw->attr);
-	BUG_ON(err);
+	if (err && err != -EOPNOTSUPP)
+		netdev_err(asw->dev, "failed (err=%d) to set attribute (id=%d)\n",
+			   err, asw->attr.id);
 	rtnl_unlock();
 
 	dev_put(asw->dev);