diff options
author | Roi Dayan <roid@nvidia.com> | 2023-04-27 14:32:58 +0300 |
---|---|---|
committer | Ilya Maximets <i.maximets@ovn.org> | 2023-04-28 19:32:39 +0200 |
commit | c6cb8288706dd6adfa0aac24ea54c28c1e38753c (patch) | |
tree | 882d00f84919a50b4d1ba744cbaf1ac64b799adf | |
parent | 29c61a4024c48cbc5bbc4d9464713ac73cb9074f (diff) | |
download | openvswitch-c6cb8288706dd6adfa0aac24ea54c28c1e38753c.tar.gz |
tc: Fix cleaning chains.
Sometimes there is a need to clean empty chains as done in
delete_chains_from_netdev(). The cited commit doesn't remove
the chain completely which cause adding ingress_block later to fail.
This can be reproduced with adding bond as ovs port which makes ovs
use ingress_block for it.
While at it add the netdev name that fails to the log.
Fixes: e1e5eac5b016 ("tc: Add TCA_KIND flower to delete and get operation to avoid rtnl_lock().")
Signed-off-by: Roi Dayan <roid@nvidia.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
-rw-r--r-- | lib/netdev-offload-tc.c | 11 | ||||
-rw-r--r-- | lib/tc.c | 4 |
2 files changed, 11 insertions, 4 deletions
diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c index c38247423..09f6393f8 100644 --- a/lib/netdev-offload-tc.c +++ b/lib/netdev-offload-tc.c @@ -525,7 +525,11 @@ delete_chains_from_netdev(struct netdev *netdev, struct tcf_id *id) */ HMAP_FOR_EACH_POP (chain_node, node, &map) { id->chain = chain_node->chain; - tc_del_flower_filter(id); + /* Delete empty chain doesn't seem to work with + * tc_del_flower_filter() so use tc_del_filter() + * without specifying TCA_KIND. + */ + tc_del_filter(id, NULL); free(chain_node); } } @@ -2879,8 +2883,9 @@ netdev_tc_init_flow_api(struct netdev *netdev) error = tc_add_del_qdisc(ifindex, true, block_id, hook); if (error && error != EEXIST) { - VLOG_INFO("failed adding ingress qdisc required for offloading: %s", - ovs_strerror(error)); + VLOG_INFO("failed adding ingress qdisc required for offloading " + "on %s: %s", + netdev_get_name(netdev), ovs_strerror(error)); return error; } @@ -2354,7 +2354,9 @@ tc_del_filter(struct tcf_id *id, const char *kind) struct ofpbuf request; request_from_tcf_id(id, 0, RTM_DELTFILTER, NLM_F_ACK, &request); - nl_msg_put_string(&request, TCA_KIND, kind); + if (kind) { + nl_msg_put_string(&request, TCA_KIND, kind); + } return tc_transact(&request, NULL); } |