From 1fd89ab65388aec6cb58ad50b2c543dd6c89087c Mon Sep 17 00:00:00 2001 From: Jozsef Kadlecsik Date: Wed, 26 Jan 2011 23:47:20 +0100 Subject: Use vzalloc() instead of __vmalloc() Use vzalloc() if kernel version supports it. (Eric Dumazet, Patrick McHardy) --- kernel/include/linux/netfilter/ipset/ip_set.h | 2 +- kernel/include/linux/netfilter/ipset/ip_set_ahash.h | 6 ++---- kernel/ip_set_bitmap_ip.c | 2 +- kernel/ip_set_bitmap_ipmac.c | 3 +-- kernel/ip_set_bitmap_port.c | 2 +- kernel/ip_set_core.c | 11 ++++++++--- kernel/ip_set_hash_ip.c | 3 +-- kernel/ip_set_hash_ipport.c | 3 +-- kernel/ip_set_hash_ipportip.c | 3 +-- kernel/ip_set_hash_ipportnet.c | 3 +-- kernel/ip_set_hash_net.c | 3 +-- kernel/ip_set_hash_netport.c | 3 +-- 12 files changed, 20 insertions(+), 24 deletions(-) diff --git a/kernel/include/linux/netfilter/ipset/ip_set.h b/kernel/include/linux/netfilter/ipset/ip_set.h index fcd2f4d..5fbb1b5 100644 --- a/kernel/include/linux/netfilter/ipset/ip_set.h +++ b/kernel/include/linux/netfilter/ipset/ip_set.h @@ -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); diff --git a/kernel/include/linux/netfilter/ipset/ip_set_ahash.h b/kernel/include/linux/netfilter/ipset/ip_set_ahash.h index ac98c2a..983eaf0 100644 --- a/kernel/include/linux/netfilter/ipset/ip_set_ahash.h +++ b/kernel/include/linux/netfilter/ipset/ip_set_ahash.h @@ -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; diff --git a/kernel/ip_set_bitmap_ip.c b/kernel/ip_set_bitmap_ip.c index f97dee2..19251d6 100644 --- a/kernel/ip_set_bitmap_ip.c +++ b/kernel/ip_set_bitmap_ip.c @@ -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; diff --git a/kernel/ip_set_bitmap_ipmac.c b/kernel/ip_set_bitmap_ipmac.c index 68fec19..3fa3921 100644 --- a/kernel/ip_set_bitmap_ipmac.c +++ b/kernel/ip_set_bitmap_ipmac.c @@ -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; diff --git a/kernel/ip_set_bitmap_port.c b/kernel/ip_set_bitmap_port.c index 3fb7c92..862b741 100644 --- a/kernel/ip_set_bitmap_port.c +++ b/kernel/ip_set_bitmap_port.c @@ -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; diff --git a/kernel/ip_set_core.c b/kernel/ip_set_core.c index 3dad957..4392680 100644 --- a/kernel/ip_set_core.c +++ b/kernel/ip_set_core.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -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); diff --git a/kernel/ip_set_hash_ip.c b/kernel/ip_set_hash_ip.c index 7f2c1f3..84caab6 100644 --- a/kernel/ip_set_hash_ip.c +++ b/kernel/ip_set_hash_ip.c @@ -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; diff --git a/kernel/ip_set_hash_ipport.c b/kernel/ip_set_hash_ipport.c index 7f37192..c8bb754 100644 --- a/kernel/ip_set_hash_ipport.c +++ b/kernel/ip_set_hash_ipport.c @@ -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; diff --git a/kernel/ip_set_hash_ipportip.c b/kernel/ip_set_hash_ipportip.c index 26dd016..423bf4e 100644 --- a/kernel/ip_set_hash_ipportip.c +++ b/kernel/ip_set_hash_ipportip.c @@ -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; diff --git a/kernel/ip_set_hash_ipportnet.c b/kernel/ip_set_hash_ipportnet.c index 379dd00..740ed5c 100644 --- a/kernel/ip_set_hash_ipportnet.c +++ b/kernel/ip_set_hash_ipportnet.c @@ -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; diff --git a/kernel/ip_set_hash_net.c b/kernel/ip_set_hash_net.c index 20b30e4..2330b4c 100644 --- a/kernel/ip_set_hash_net.c +++ b/kernel/ip_set_hash_net.c @@ -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; diff --git a/kernel/ip_set_hash_netport.c b/kernel/ip_set_hash_netport.c index 636f367..f79077a 100644 --- a/kernel/ip_set_hash_netport.c +++ b/kernel/ip_set_hash_netport.c @@ -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; -- cgit v1.2.3