switchdev: fix BUG when port driver doesn't support set attr op
authorScott Feldman <sfeldma@gmail.com>
Thu, 11 Jun 2015 15:19:01 +0000 (08:19 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 11 Jun 2015 23:27:09 +0000 (16:27 -0700)
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>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/switchdev/switchdev.c

index b683e89b4caaee83156a4697351901119b2c2f55..658bc3ac80089da1fe676c82ff591dd3bfdbb3be 100644 (file)
@@ -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);