diff mbox

[ovs-dev,01/11] datapath: introduce nf_conntrack_helper_put function

Message ID 20170721234614.2800-2-joe@ovn.org
State Accepted
Headers show

Commit Message

Joe Stringer July 21, 2017, 11:46 p.m. UTC
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

Comments

Gregory Rose July 24, 2017, 3:13 p.m. UTC | #1
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 mbox

Patch

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 */