Message ID | 20170721234614.2800-2-joe@ovn.org |
---|---|
State | Accepted |
Headers | show |
On 07/21/2017 04:46 PM, Joe Stringer wrote: > From: Greg Rose <gvrose8192@gmail.com> > > Upstream commit: > commit d91fc59cd77c719f33eda65c194ad8f95a055190 > Author: Liping Zhang <zlpnobody@gmail.com> > Date: Sun May 7 22:01:55 2017 +0800 > > netfilter: introduce nf_conntrack_helper_put helper function > > And convert module_put invocation to nf_conntrack_helper_put, this is > prepared for the followup patch, which will add a refcnt for cthelper, > so we can reject the deleting request when cthelper is in use. > > Signed-off-by: Liping Zhang <zlpnobody@gmail.com> > Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> > > Applied with additional use of HAVE_NF_CONNTRACK_HELPER_PUT compatibility > flag defined in acinclude.m4. > > Signed-off-by: Greg Rose <gvrose8192@gmail.com> > Signed-off-by: Joe Stringer <joe@ovn.org> > --- > v2: Shift compat symbol definitions to patch which uses it. > Add nf_conntrack_helper.h compat header to define the new function. > --- > acinclude.m4 | 2 ++ > datapath/conntrack.c | 4 ++-- > datapath/linux/Modules.mk | 1 + > .../linux/compat/include/net/netfilter/nf_conntrack_helper.h | 12 ++++++++++++ > 4 files changed, 17 insertions(+), 2 deletions(-) > create mode 100644 datapath/linux/compat/include/net/netfilter/nf_conntrack_helper.h > > diff --git a/acinclude.m4 b/acinclude.m4 > index e7affc514811..62a91e650a4a 100644 > --- a/acinclude.m4 > +++ b/acinclude.m4 > @@ -748,6 +748,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ > [OVS_DEFINE([HAVE_DEFRAG_ENABLE_TAKES_NET])]) > OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [family_list], > [OVS_DEFINE([HAVE_GENL_FAMILY_LIST])]) > + OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_helper.h], > + [nf_conntrack_helper_put]) > > if cmp -s datapath/linux/kcompat.h.new \ > datapath/linux/kcompat.h >/dev/null 2>&1; then > diff --git a/datapath/conntrack.c b/datapath/conntrack.c > index bf28fc071929..01f54bf048c6 100644 > --- a/datapath/conntrack.c > +++ b/datapath/conntrack.c > @@ -1164,7 +1164,7 @@ static int ovs_ct_add_helper(struct ovs_conntrack_info *info, const char *name, > > help = nf_ct_helper_ext_add(info->ct, helper, GFP_KERNEL); > if (!help) { > - module_put(helper->me); > + nf_conntrack_helper_put(helper); > return -ENOMEM; > } > > @@ -1634,7 +1634,7 @@ void ovs_ct_free_action(const struct nlattr *a) > static void __ovs_ct_free_action(struct ovs_conntrack_info *ct_info) > { > if (ct_info->helper) > - module_put(ct_info->helper->me); > + nf_conntrack_helper_put(ct_info->helper); > if (ct_info->ct) > nf_ct_tmpl_free(ct_info->ct); > } > diff --git a/datapath/linux/Modules.mk b/datapath/linux/Modules.mk > index 985ffed4557a..eec9f2338d98 100644 > --- a/datapath/linux/Modules.mk > +++ b/datapath/linux/Modules.mk > @@ -95,6 +95,7 @@ openvswitch_headers += \ > linux/compat/include/net/netfilter/nf_conntrack.h \ > linux/compat/include/net/netfilter/nf_conntrack_core.h \ > linux/compat/include/net/netfilter/nf_conntrack_expect.h \ > + linux/compat/include/net/netfilter/nf_conntrack_helper.h \ > linux/compat/include/net/netfilter/nf_conntrack_labels.h \ > linux/compat/include/net/netfilter/nf_conntrack_seqadj.h \ > linux/compat/include/net/netfilter/nf_conntrack_zones.h \ > diff --git a/datapath/linux/compat/include/net/netfilter/nf_conntrack_helper.h b/datapath/linux/compat/include/net/netfilter/nf_conntrack_helper.h > new file mode 100644 > index 000000000000..19c35cd95f6f > --- /dev/null > +++ b/datapath/linux/compat/include/net/netfilter/nf_conntrack_helper.h > @@ -0,0 +1,12 @@ > +#ifndef _NF_CONNTRACK_HELPER_WRAPPER_H > +#define _NF_CONNTRACK_HELPER_WRAPPER_H > + > +#include_next <net/netfilter/nf_conntrack_helper.h> > + > +#ifndef HAVE_NF_CONNTRACK_HELPER_PUT > +static inline void nf_conntrack_helper_put(struct nf_conntrack_helper *helper) { > + module_put(helper->me); > +} > +#endif > + > +#endif /* _NF_CONNTRACK_HELPER_WRAPPER_H */ > LGTM Thanks Joe!
diff --git a/acinclude.m4 b/acinclude.m4 index e7affc514811..62a91e650a4a 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -748,6 +748,8 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ [OVS_DEFINE([HAVE_DEFRAG_ENABLE_TAKES_NET])]) OVS_GREP_IFELSE([$KSRC/include/net/genetlink.h], [family_list], [OVS_DEFINE([HAVE_GENL_FAMILY_LIST])]) + OVS_GREP_IFELSE([$KSRC/include/net/netfilter/nf_conntrack_helper.h], + [nf_conntrack_helper_put]) if cmp -s datapath/linux/kcompat.h.new \ datapath/linux/kcompat.h >/dev/null 2>&1; then diff --git a/datapath/conntrack.c b/datapath/conntrack.c index bf28fc071929..01f54bf048c6 100644 --- a/datapath/conntrack.c +++ b/datapath/conntrack.c @@ -1164,7 +1164,7 @@ static int ovs_ct_add_helper(struct ovs_conntrack_info *info, const char *name, help = nf_ct_helper_ext_add(info->ct, helper, GFP_KERNEL); if (!help) { - module_put(helper->me); + nf_conntrack_helper_put(helper); return -ENOMEM; } @@ -1634,7 +1634,7 @@ void ovs_ct_free_action(const struct nlattr *a) static void __ovs_ct_free_action(struct ovs_conntrack_info *ct_info) { if (ct_info->helper) - module_put(ct_info->helper->me); + nf_conntrack_helper_put(ct_info->helper); if (ct_info->ct) nf_ct_tmpl_free(ct_info->ct); } diff --git a/datapath/linux/Modules.mk b/datapath/linux/Modules.mk index 985ffed4557a..eec9f2338d98 100644 --- a/datapath/linux/Modules.mk +++ b/datapath/linux/Modules.mk @@ -95,6 +95,7 @@ openvswitch_headers += \ linux/compat/include/net/netfilter/nf_conntrack.h \ linux/compat/include/net/netfilter/nf_conntrack_core.h \ linux/compat/include/net/netfilter/nf_conntrack_expect.h \ + linux/compat/include/net/netfilter/nf_conntrack_helper.h \ linux/compat/include/net/netfilter/nf_conntrack_labels.h \ linux/compat/include/net/netfilter/nf_conntrack_seqadj.h \ linux/compat/include/net/netfilter/nf_conntrack_zones.h \ diff --git a/datapath/linux/compat/include/net/netfilter/nf_conntrack_helper.h b/datapath/linux/compat/include/net/netfilter/nf_conntrack_helper.h new file mode 100644 index 000000000000..19c35cd95f6f --- /dev/null +++ b/datapath/linux/compat/include/net/netfilter/nf_conntrack_helper.h @@ -0,0 +1,12 @@ +#ifndef _NF_CONNTRACK_HELPER_WRAPPER_H +#define _NF_CONNTRACK_HELPER_WRAPPER_H + +#include_next <net/netfilter/nf_conntrack_helper.h> + +#ifndef HAVE_NF_CONNTRACK_HELPER_PUT +static inline void nf_conntrack_helper_put(struct nf_conntrack_helper *helper) { + module_put(helper->me); +} +#endif + +#endif /* _NF_CONNTRACK_HELPER_WRAPPER_H */