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:01:14 +0200 |
commit | 77d82289857f5cdcaaf4be06e17e750edcf0abd3 (patch) | |
tree | f3adb708cdcb645d9f3d2d7b710a09f92791e98d | |
parent | 572e89f418e81f63053de7c284c4dcbf960ebaee (diff) | |
download | openvswitch-77d82289857f5cdcaaf4be06e17e750edcf0abd3.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 c9662081f..4f26dd8cc 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); } |