From f87083ee9cf7417a76105f26ef705426cc551e3b Mon Sep 17 00:00:00 2001 From: WANG Cong Date: Mon, 3 Nov 2014 17:35:30 +0100 Subject: net: use the new API kvfree() It is available since v3.15-rc5. Cc: Pablo Neira Ayuso Cc: "David S. Miller" Signed-off-by: Cong Wang Signed-off-by: David S. Miller --- configure.ac | 10 ++++++++++ kernel/include/linux/netfilter/ipset/ip_set_compat.h.in | 11 +++++++++++ kernel/net/netfilter/ipset/ip_set_core.c | 5 +---- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 8fdac15..10529af 100644 --- a/configure.ac +++ b/configure.ac @@ -323,6 +323,16 @@ else AC_SUBST(HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE, undef) fi +AC_MSG_CHECKING([kernel source for kvfree]) +if test -f $ksourcedir/include/linux/mm.h && \ + $GREP -q 'kvfree' $ksourcedir/include/linux/mm.h; then + AC_MSG_RESULT(yes) + AC_SUBST(HAVE_KVFREE, define) +else + AC_MSG_RESULT(no) + AC_SUBST(HAVE_KVFREE, undef) +fi + AC_MSG_CHECKING([kernel source for struct net_generic]) if test -f $ksourcedir/include/net/netns/generic.h && \ $GREP -q 'struct net_generic' $ksourcedir/include/net/netns/generic.h; then diff --git a/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in b/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in index 0966289..d38197c 100644 --- a/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in +++ b/kernel/include/linux/netfilter/ipset/ip_set_compat.h.in @@ -35,6 +35,7 @@ #@HAVE_NET_OPS_ID@ HAVE_NET_OPS_ID #@HAVE_USER_NS_IN_STRUCT_NET@ HAVE_USER_NS_IN_STRUCT_NET #@HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE@ HAVE_RBTREE_POSTORDER_FOR_EACH_ENTRY_SAFE +#@HAVE_KVFREE@ HAVE_KVFREE /* Not everything could be moved here. Compatibility stuffs can be found in * xt_set.c, ip_set_core.c, ip_set_getport.c, pfxlen.c too. @@ -115,6 +116,16 @@ static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value) #define unlock_nfnl() nfnl_unlock() #endif +#ifndef HAVE_KVFREE +static inline void kvfree(const void *addr) +{ + if (is_vmalloc_addr(addr)) + vfree(addr); + else + kfree(addr); +} +#endif + #ifdef NLA_PUT_NET16 static inline int nla_put_be16(struct sk_buff *skb, int attrtype, __be16 value) { diff --git a/kernel/net/netfilter/ipset/ip_set_core.c b/kernel/net/netfilter/ipset/ip_set_core.c index bd45302..d37ee69 100644 --- a/kernel/net/netfilter/ipset/ip_set_core.c +++ b/kernel/net/netfilter/ipset/ip_set_core.c @@ -276,10 +276,7 @@ ip_set_free(void *members) { pr_debug("%p: free with %s\n", members, is_vmalloc_addr(members) ? "vfree" : "kfree"); - if (is_vmalloc_addr(members)) - vfree(members); - else - kfree(members); + kvfree(members); } EXPORT_SYMBOL_GPL(ip_set_free); -- cgit v1.2.3