]> granicus.if.org Git - ipset/commitdiff
Use vzalloc() instead of __vmalloc()
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Wed, 26 Jan 2011 22:47:20 +0000 (23:47 +0100)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Wed, 26 Jan 2011 22:47:20 +0000 (23:47 +0100)
Use vzalloc() if kernel version supports it. (Eric Dumazet, Patrick McHardy)

12 files changed:
kernel/include/linux/netfilter/ipset/ip_set.h
kernel/include/linux/netfilter/ipset/ip_set_ahash.h
kernel/ip_set_bitmap_ip.c
kernel/ip_set_bitmap_ipmac.c
kernel/ip_set_bitmap_port.c
kernel/ip_set_core.c
kernel/ip_set_hash_ip.c
kernel/ip_set_hash_ipport.c
kernel/ip_set_hash_ipportip.c
kernel/ip_set_hash_ipportnet.c
kernel/ip_set_hash_net.c
kernel/ip_set_hash_netport.c

index fcd2f4dd7650a4937cd585eded12efa5230ee65e..5fbb1b538903cb82ed6c2f79b1e12c4b89f6f940 100644 (file)
@@ -318,7 +318,7 @@ extern int ip_set_test(ip_set_id_t id, const struct sk_buff *skb,
                       u8 family, u8 dim, u8 flags);
 
 /* Utility functions */
-extern void * ip_set_alloc(size_t size, gfp_t gfp_mask);
+extern void * ip_set_alloc(size_t size);
 extern void ip_set_free(void *members);
 extern int ip_set_get_ipaddr4(struct nlattr *nla,  __be32 *ipaddr);
 extern int ip_set_get_ipaddr6(struct nlattr *nla, union nf_inet_addr *ipaddr);
index ac98c2a7ecd5bcd9a2d2d8c01b1725b72ab5ce2f..983eaf0518e50f1e3fada70a0ccaf7cbcadedb8f 100644 (file)
@@ -311,8 +311,7 @@ retry:
                /* In case we have plenty of memory :-) */
                return -IPSET_ERR_HASH_FULL;
        t = ip_set_alloc(sizeof(*t)
-                        + jhash_size(htable_bits) * sizeof(struct hbucket),
-                        GFP_KERNEL);
+                        + jhash_size(htable_bits) * sizeof(struct hbucket));
        if (!t)
                return -ENOMEM;
        t->htable_bits = htable_bits;
@@ -743,8 +742,7 @@ retry:
                /* In case we have plenty of memory :-) */
                return -IPSET_ERR_HASH_FULL;
        t = ip_set_alloc(sizeof(*t)
-                        + jhash_size(htable_bits) * sizeof(struct hbucket),
-                        GFP_KERNEL);
+                        + jhash_size(htable_bits) * sizeof(struct hbucket));
        if (!t)
                return -ENOMEM;
        t->htable_bits = htable_bits;
index f97dee22738d1d4dab14a4330ff125a2fb27f573..19251d6959d1af97e11a128efd58f8dd89ed2354 100644 (file)
@@ -585,7 +585,7 @@ init_map_ip(struct ip_set *set, struct bitmap_ip *map,
            u32 first_ip, u32 last_ip,
            u32 elements, u32 hosts, u8 netmask)
 {
-       map->members = ip_set_alloc(map->memsize, GFP_KERNEL);
+       map->members = ip_set_alloc(map->memsize);
        if (!map->members)
                return false;
        map->first_ip = first_ip;
index 68fec19f7f2ee806027a2a3fe5e950e8105f8d7f..3fa392151c498be404e00e10f18dd129781f9cba 100644 (file)
@@ -554,8 +554,7 @@ static bool
 init_map_ipmac(struct ip_set *set, struct bitmap_ipmac *map,
               u32 first_ip, u32 last_ip)
 {
-       map->members = ip_set_alloc((last_ip - first_ip + 1) * map->dsize,
-                                   GFP_KERNEL);
+       map->members = ip_set_alloc((last_ip - first_ip + 1) * map->dsize);
        if (!map->members)
                return false;
        map->first_ip = first_ip;
index 3fb7c92380bda7e2eff3a35e126498d7833bd7dc..862b74120d8adf6926b98fff5f70542cb66c7ed7 100644 (file)
@@ -554,7 +554,7 @@ static bool
 init_map_port(struct ip_set *set, struct bitmap_port *map,
              u16 first_port, u16 last_port)
 {
-       map->members = ip_set_alloc(map->memsize, GFP_KERNEL);
+       map->members = ip_set_alloc(map->memsize);
        if (!map->members)
                return false;
        map->first_port = first_port;
index 3dad957e96eb81aa25984f0e95b35ca12b9a6192..439268034669465a9747532aec1f2da052e3976c 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/spinlock.h>
 #include <linux/netlink.h>
 #include <linux/rculist.h>
+#include <linux/version.h>
 #include <net/netlink.h>
 
 #include <linux/netfilter.h>
@@ -193,20 +194,24 @@ EXPORT_SYMBOL_GPL(ip_set_type_unregister);
 
 /* Utility functions */
 void *
-ip_set_alloc(size_t size, gfp_t gfp_mask)
+ip_set_alloc(size_t size)
 {
        void *members = NULL;
 
        if (size < KMALLOC_MAX_SIZE)
-               members = kzalloc(size, gfp_mask | __GFP_NOWARN);
+               members = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
 
        if (members) {
                pr_debug("%p: allocated with kmalloc\n", members);
                return members;
        }
 
-       members = __vmalloc(size, gfp_mask | __GFP_ZERO | __GFP_HIGHMEM,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 37)
+       members = __vmalloc(size, GFP_KERNEL | __GFP_ZERO | __GFP_HIGHMEM,
                            PAGE_KERNEL);
+#else
+       members = vzalloc(size);
+#endif
        if (!members)
                return NULL;
        pr_debug("%p: allocated with vmalloc\n", members);
index 7f2c1f3db26cf68d8184e3feceea6ca6a007befb..84caab6b0616f69fc693c936caf4f155f313f7af 100644 (file)
@@ -425,8 +425,7 @@ hash_ip_create(struct ip_set *set, struct nlattr *head, int len, u32 flags)
        hbits = htable_bits(hashsize);
        h->table = ip_set_alloc(
                        sizeof(struct htable)
-                       + jhash_size(hbits) * sizeof(struct hbucket),
-                       GFP_KERNEL);
+                       + jhash_size(hbits) * sizeof(struct hbucket));
        if (!h->table) {
                kfree(h);
                return -ENOMEM;
index 7f37192d7016d6203ae82e718d4a213759195335..c8bb7549d05732583d27638378547f0624246e5f 100644 (file)
@@ -506,8 +506,7 @@ hash_ipport_create(struct ip_set *set, struct nlattr *head, int len, u32 flags)
        hbits = htable_bits(hashsize);
        h->table = ip_set_alloc(
                        sizeof(struct htable)
-                       + jhash_size(hbits) * sizeof(struct hbucket),
-                       GFP_KERNEL);
+                       + jhash_size(hbits) * sizeof(struct hbucket));
        if (!h->table) {
                kfree(h);
                return -ENOMEM;
index 26dd016f192e8da6db450fbb5336c58af0f1bb14..423bf4ea230b2b2d8bdaa150facbad7b39b33106 100644 (file)
@@ -525,8 +525,7 @@ hash_ipportip_create(struct ip_set *set, struct nlattr *head,
        hbits = htable_bits(hashsize);
        h->table = ip_set_alloc(
                        sizeof(struct htable)
-                       + jhash_size(hbits) * sizeof(struct hbucket),
-                       GFP_KERNEL);
+                       + jhash_size(hbits) * sizeof(struct hbucket));
        if (!h->table) {
                kfree(h);
                return -ENOMEM;
index 379dd00dcdb9573d4f9686e343c7d46743a323d1..740ed5c1f635a5ea316167eaa047c83058d39e99 100644 (file)
@@ -590,8 +590,7 @@ hash_ipportnet_create(struct ip_set *set, struct nlattr *head,
        hbits = htable_bits(hashsize);
        h->table = ip_set_alloc(
                        sizeof(struct htable)
-                       + jhash_size(hbits) * sizeof(struct hbucket),
-                       GFP_KERNEL);
+                       + jhash_size(hbits) * sizeof(struct hbucket));
        if (!h->table) {
                kfree(h);
                return -ENOMEM;
index 20b30e4185d7e8701876251bc305bbec81da6d50..2330b4c39ecbafaba867a0d6ca037dce95b330b9 100644 (file)
@@ -421,8 +421,7 @@ hash_net_create(struct ip_set *set, struct nlattr *head, int len, u32 flags)
        hbits = htable_bits(hashsize);
        h->table = ip_set_alloc(
                        sizeof(struct htable)
-                       + jhash_size(hbits) * sizeof(struct hbucket),
-                       GFP_KERNEL);
+                       + jhash_size(hbits) * sizeof(struct hbucket));
        if (!h->table) {
                kfree(h);
                return -ENOMEM;
index 636f3677bf2ed81c9f5244c7e27ea9367d004cb2..f79077a63795af3d6ddc2344e03e7f352c4bbace 100644 (file)
@@ -542,8 +542,7 @@ hash_netport_create(struct ip_set *set, struct nlattr *head, int len, u32 flags)
        hbits = htable_bits(hashsize);
        h->table = ip_set_alloc(
                        sizeof(struct htable)
-                       + jhash_size(hbits) * sizeof(struct hbucket),
-                       GFP_KERNEL);
+                       + jhash_size(hbits) * sizeof(struct hbucket));
        if (!h->table) {
                kfree(h);
                return -ENOMEM;