diff options
author | Vlad Buslov <vladbu@mellanox.com> | 2020-02-17 12:12:09 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-02-17 14:17:02 -0800 |
commit | 7a47281439ba00b11fc098f36695522184ce5a82 (patch) | |
tree | 1e8992267d2b3ede0f0a436aab381e768cfcb8ce /include/net/tc_act | |
parent | 92df9f8a745ee9b8cc250514272345cb2e74e7ef (diff) | |
download | lwn-7a47281439ba00b11fc098f36695522184ce5a82.tar.gz lwn-7a47281439ba00b11fc098f36695522184ce5a82.zip |
net: sched: lock action when translating it to flow_action infra
In order to remove dependency on rtnl lock, take action's tcfa_lock when
constructing its representation as flow_action_entry structure.
Refactor tcf_sample_get_group() to assume that caller holds tcf_lock and
don't take it manually. This callback is only called from flow_action infra
representation translator which now calls it with tcf_lock held, so this
refactoring is necessary to prevent deadlock.
Allocate memory with GFP_ATOMIC flag for ip_tunnel_info copy because
tcf_tunnel_info_copy() is only called from flow_action representation infra
code with tcf_lock spinlock taken.
Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/tc_act')
-rw-r--r-- | include/net/tc_act/tc_tunnel_key.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/net/tc_act/tc_tunnel_key.h b/include/net/tc_act/tc_tunnel_key.h index 0689d9bcdf84..2b3df076e5b6 100644 --- a/include/net/tc_act/tc_tunnel_key.h +++ b/include/net/tc_act/tc_tunnel_key.h @@ -69,7 +69,7 @@ tcf_tunnel_info_copy(const struct tc_action *a) if (tun) { size_t tun_size = sizeof(*tun) + tun->options_len; struct ip_tunnel_info *tun_copy = kmemdup(tun, tun_size, - GFP_KERNEL); + GFP_ATOMIC); return tun_copy; } |