Commit 9858a3ae1d4b390fbaa9c30b83cb66d861b76294

Authored by Pablo Neira Ayuso
Committed by Patrick McHardy
1 parent a0891aa6a6

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);