diff options
author | Jiri Pirko <jiri@mellanox.com> | 2015-10-14 19:40:50 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-15 15:09:48 +0200 |
commit | 0bc05d585d381c30de3fdf955730df31593d2101 (patch) | |
tree | 67c6871b0b123fe73507273b9a50a53f0e0e1010 /net/bridge | |
parent | switchdev: make struct switchdev_attr parameter const for attr_set calls (diff) | |
download | linux-0bc05d585d381c30de3fdf955730df31593d2101.tar.xz linux-0bc05d585d381c30de3fdf955730df31593d2101.zip |
switchdev: allow caller to explicitly request attr_set as deferred
Caller should know if he can call attr_set directly (when holding RTNL)
or if he has to defer the att_set processing for later.
This also allows drivers to sleep inside attr_set and report operation
status back to switchdev core. Switchdev core then warns if status is
not ok, instead of silent errors happening in drivers.
Benefit from newly introduced switchdev deferred ops infrastructure.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge')
-rw-r--r-- | net/bridge/br_stp.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/bridge/br_stp.c b/net/bridge/br_stp.c index db6d243defb2..80c34d70218c 100644 --- a/net/bridge/br_stp.c +++ b/net/bridge/br_stp.c @@ -41,13 +41,14 @@ void br_set_state(struct net_bridge_port *p, unsigned int state) { struct switchdev_attr attr = { .id = SWITCHDEV_ATTR_ID_PORT_STP_STATE, + .flags = SWITCHDEV_F_DEFER, .u.stp_state = state, }; int err; p->state = state; err = switchdev_port_attr_set(p->dev, &attr); - if (err && err != -EOPNOTSUPP) + if (err) br_warn(p->br, "error setting offload STP state on port %u(%s)\n", (unsigned int) p->port_no, p->dev->name); } |