Commit 9858a3ae1d4b390fbaa9c30b83cb66d861b76294
Committed by
Patrick McHardy
1 parent
a0891aa6a6
Exists in
master
and in
7 other branches
netfilter: conntrack: move helper destruction to nf_ct_helper_destroy()
This patch moves the helper destruction to a function that lives in nf_conntrack_helper.c. This new function is used in the patch to add ctnetlink reliable event delivery. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: Patrick McHardy <kaber@trash.net>
Showing 3 changed files with 17 additions and 10 deletions Side-by-side Diff
include/net/netfilter/nf_conntrack_helper.h
... | ... | @@ -50,6 +50,8 @@ |
50 | 50 | |
51 | 51 | extern int __nf_ct_try_assign_helper(struct nf_conn *ct, gfp_t flags); |
52 | 52 | |
53 | +extern void nf_ct_helper_destroy(struct nf_conn *ct); | |
54 | + | |
53 | 55 | static inline struct nf_conn_help *nfct_help(const struct nf_conn *ct) |
54 | 56 | { |
55 | 57 | return nf_ct_ext_find(ct, NF_CT_EXT_HELPER); |
net/netfilter/nf_conntrack_core.c
... | ... | @@ -224,17 +224,8 @@ |
224 | 224 | { |
225 | 225 | struct nf_conn *ct = (void *)ul_conntrack; |
226 | 226 | struct net *net = nf_ct_net(ct); |
227 | - struct nf_conn_help *help = nfct_help(ct); | |
228 | - struct nf_conntrack_helper *helper; | |
229 | 227 | |
230 | - if (help) { | |
231 | - rcu_read_lock(); | |
232 | - helper = rcu_dereference(help->helper); | |
233 | - if (helper && helper->destroy) | |
234 | - helper->destroy(ct); | |
235 | - rcu_read_unlock(); | |
236 | - } | |
237 | - | |
228 | + nf_ct_helper_destroy(ct); | |
238 | 229 | spin_lock_bh(&nf_conntrack_lock); |
239 | 230 | /* Inside lock so preempt is disabled on module removal path. |
240 | 231 | * Otherwise we can get spurious warnings. */ |
net/netfilter/nf_conntrack_helper.c
... | ... | @@ -136,6 +136,20 @@ |
136 | 136 | return 0; |
137 | 137 | } |
138 | 138 | |
139 | +void nf_ct_helper_destroy(struct nf_conn *ct) | |
140 | +{ | |
141 | + struct nf_conn_help *help = nfct_help(ct); | |
142 | + struct nf_conntrack_helper *helper; | |
143 | + | |
144 | + if (help) { | |
145 | + rcu_read_lock(); | |
146 | + helper = rcu_dereference(help->helper); | |
147 | + if (helper && helper->destroy) | |
148 | + helper->destroy(ct); | |
149 | + rcu_read_unlock(); | |
150 | + } | |
151 | +} | |
152 | + | |
139 | 153 | int nf_conntrack_helper_register(struct nf_conntrack_helper *me) |
140 | 154 | { |
141 | 155 | unsigned int h = helper_hash(&me->tuple); |