It is available since v3.15-rc5.
Cc: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: "David S. Miller" <davem@davemloft.net>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
 
 static void netif_free_tx_queues(struct net_device *dev)
 {
-       if (is_vmalloc_addr(dev->_tx))
-               vfree(dev->_tx);
-       else
-               kfree(dev->_tx);
+       kvfree(dev->_tx);
 }
 
 static int netif_alloc_netdev_queues(struct net_device *dev)
 {
        char *addr = (char *)dev - dev->padded;
 
-       if (is_vmalloc_addr(addr))
-               vfree(addr);
-       else
-               kfree(addr);
+       kvfree(addr);
 }
 
 /**
 
                        tm = next;
                }
        }
-       if (is_vmalloc_addr(net->ipv4.tcp_metrics_hash))
-               vfree(net->ipv4.tcp_metrics_hash);
-       else
-               kfree(net->ipv4.tcp_metrics_hash);
+       kvfree(net->ipv4.tcp_metrics_hash);
 }
 
 static __net_initdata struct pernet_operations tcp_net_metrics_ops = {
 
 {
        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);
 
 
 
 static void nft_hash_tbl_free(const struct nft_hash_table *tbl)
 {
-       if (is_vmalloc_addr(tbl))
-               vfree(tbl);
-       else
-               kfree(tbl);
+       kvfree(tbl);
 }
 
 static unsigned int nft_hash_tbl_size(unsigned int nelem)
 
 
 static void recent_table_free(void *addr)
 {
-       if (is_vmalloc_addr(addr))
-               vfree(addr);
-       else
-               kfree(addr);
+       kvfree(addr);
 }
 
 static int recent_mt_check(const struct xt_mtchk_param *par,
 
 
 static void choke_free(void *addr)
 {
-       if (addr) {
-               if (is_vmalloc_addr(addr))
-                       vfree(addr);
-               else
-                       kfree(addr);
-       }
+       kvfree(addr);
 }
 
 static int choke_change(struct Qdisc *sch, struct nlattr *opt)
 
 
 static void fq_free(void *addr)
 {
-       if (addr && is_vmalloc_addr(addr))
-               vfree(addr);
-       else
-               kfree(addr);
+       kvfree(addr);
 }
 
 static int fq_resize(struct Qdisc *sch, u32 log)
 
 
 static void fq_codel_free(void *addr)
 {
-       if (addr) {
-               if (is_vmalloc_addr(addr))
-                       vfree(addr);
-               else
-                       kfree(addr);
-       }
+       kvfree(addr);
 }
 
 static void fq_codel_destroy(struct Qdisc *sch)
 
 
 static void hhf_free(void *addr)
 {
-       if (addr) {
-               if (is_vmalloc_addr(addr))
-                       vfree(addr);
-               else
-                       kfree(addr);
-       }
+       kvfree(addr);
 }
 
 static void hhf_destroy(struct Qdisc *sch)
 
 
 static void dist_free(struct disttable *d)
 {
-       if (d) {
-               if (is_vmalloc_addr(d))
-                       vfree(d);
-               else
-                       kfree(d);
-       }
+       kvfree(d);
 }
 
 /*
 
 
 static void sfq_free(void *addr)
 {
-       if (addr) {
-               if (is_vmalloc_addr(addr))
-                       vfree(addr);
-               else
-                       kfree(addr);
-       }
+       kvfree(addr);
 }
 
 static void sfq_destroy(struct Qdisc *sch)