Skip to content

Commit

Permalink
switchdev: skip over ports returning -EOPNOTSUPP when recursing ports
Browse files Browse the repository at this point in the history
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 <sfeldma@gmail.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Scott Feldman authored and David S. Miller committed Oct 12, 2015
1 parent f55ac58 commit 464314e
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 1 deletion.
1 change: 1 addition & 0 deletions include/net/switchdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <linux/list.h>

#define SWITCHDEV_F_NO_RECURSE BIT(0)
#define SWITCHDEV_F_SKIP_EOPNOTSUPP BIT(1)

struct switchdev_trans_item {
struct list_head list;
Expand Down
9 changes: 8 additions & 1 deletion net/switchdev/switchdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ static int __switchdev_port_attr_set(struct net_device *dev,
return ops->switchdev_port_attr_set(dev, attr, trans);

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
Expand All @@ -156,10 +156,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, trans);
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;
}

Expand Down

0 comments on commit 464314e

Please sign in to comment.