Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1654374 > unrolled thread

[PATCH 0/3] replace few other kvmalloc open coded variants

Started byMichal Hocko <mhocko@kernel.org>
First post2017-05-31 18:00 +0200
Last post2017-05-31 18:00 +0200
Articles 3 — 1 participant

Back to article view | Back to linux.kernel


Contents

  [PATCH 0/3] replace few other kvmalloc open coded variants Michal Hocko <mhocko@kernel.org> - 2017-05-31 18:00 +0200
    [PATCH 1/3] fs/file: replace alloc_fdmem with kvmalloc alternative Michal Hocko <mhocko@kernel.org> - 2017-05-31 18:00 +0200
    [PATCH 3/3] netfilter: use kvmalloc xt_alloc_table_info Michal Hocko <mhocko@kernel.org> - 2017-05-31 18:00 +0200

#1654374 — [PATCH 0/3] replace few other kvmalloc open coded variants

FromMichal Hocko <mhocko@kernel.org>
Date2017-05-31 18:00 +0200
Subject[PATCH 0/3] replace few other kvmalloc open coded variants
Message-ID<tNecp-6Ly-3@gated-at.bofh.it>
Hi,
while doing something unrelated I've noticed these few open coded
kvmalloc variants so let's replace them with the library function. Each
patch can be merged separately so I hope I've CCed proper people. This
is based on the current linux-next.

Shortlog
Michal Hocko (3):
      fs/file: replace alloc_fdmem with kvmalloc alternative
      lib/rhashtable.c: use kvzalloc in bucket_table_alloc when possible
      netfilter: use kvmalloc xt_alloc_table_info

Diffstat
 fs/file.c                | 22 ++++------------------
 lib/rhashtable.c         |  7 +++----
 net/netfilter/x_tables.c | 12 ++++--------
 3 files changed, 11 insertions(+), 30 deletions(-)

[toc] | [next] | [standalone]


#1654377 — [PATCH 1/3] fs/file: replace alloc_fdmem with kvmalloc alternative

FromMichal Hocko <mhocko@kernel.org>
Date2017-05-31 18:00 +0200
Subject[PATCH 1/3] fs/file: replace alloc_fdmem with kvmalloc alternative
Message-ID<tNecq-6Ly-11@gated-at.bofh.it>
In reply to#1654374
From: Michal Hocko <mhocko@suse.com>

There is no real reason to duplicate kvmalloc* helpers so drop
alloc_fdmem and replace it with the appropriate library function.

Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Michal Hocko <mhocko@suse.com>
---
 fs/file.c | 22 ++++------------------
 1 file changed, 4 insertions(+), 18 deletions(-)

diff --git a/fs/file.c b/fs/file.c
index 1c2972e3a405..1fc7fbbb4510 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -30,21 +30,6 @@ unsigned int sysctl_nr_open_min = BITS_PER_LONG;
 unsigned int sysctl_nr_open_max =
 	__const_min(INT_MAX, ~(size_t)0/sizeof(void *)) & -BITS_PER_LONG;
 
-static void *alloc_fdmem(size_t size)
-{
-	/*
-	 * Very large allocations can stress page reclaim, so fall back to
-	 * vmalloc() if the allocation size will be considered "large" by the VM.
-	 */
-	if (size <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER)) {
-		void *data = kmalloc(size, GFP_KERNEL_ACCOUNT |
-				     __GFP_NOWARN | __GFP_NORETRY);
-		if (data != NULL)
-			return data;
-	}
-	return __vmalloc(size, GFP_KERNEL_ACCOUNT, PAGE_KERNEL);
-}
-
 static void __free_fdtable(struct fdtable *fdt)
 {
 	kvfree(fdt->fd);
@@ -131,13 +116,14 @@ static struct fdtable * alloc_fdtable(unsigned int nr)
 	if (!fdt)
 		goto out;
 	fdt->max_fds = nr;
-	data = alloc_fdmem(nr * sizeof(struct file *));
+	data = kvmalloc_array(nr, sizeof(struct file *), GFP_KERNEL_ACCOUNT);
 	if (!data)
 		goto out_fdt;
 	fdt->fd = data;
 
-	data = alloc_fdmem(max_t(size_t,
-				 2 * nr / BITS_PER_BYTE + BITBIT_SIZE(nr), L1_CACHE_BYTES));
+	data = kvmalloc(max_t(size_t,
+				 2 * nr / BITS_PER_BYTE + BITBIT_SIZE(nr), L1_CACHE_BYTES),
+				 GFP_KERNEL_ACCOUNT);
 	if (!data)
 		goto out_arr;
 	fdt->open_fds = data;
-- 
2.11.0

[toc] | [prev] | [next] | [standalone]


#1654384 — [PATCH 3/3] netfilter: use kvmalloc xt_alloc_table_info

FromMichal Hocko <mhocko@kernel.org>
Date2017-05-31 18:00 +0200
Subject[PATCH 3/3] netfilter: use kvmalloc xt_alloc_table_info
Message-ID<tNecq-6Ly-25@gated-at.bofh.it>
In reply to#1654374
From: Michal Hocko <mhocko@suse.com>

xt_alloc_table_info basically opencodes kvmalloc so use the library
function instead.

Cc: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Cc: Florian Westphal <fw@strlen.de>
Cc: netfilter-devel@vger.kernel.org
Signed-off-by: Michal Hocko <mhocko@suse.com>
---
 net/netfilter/x_tables.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
index 1770c1d9b37f..e1648238a9c9 100644
--- a/net/netfilter/x_tables.c
+++ b/net/netfilter/x_tables.c
@@ -1003,14 +1003,10 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size)
 	if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages)
 		return NULL;
 
-	if (sz <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER))
-		info = kmalloc(sz, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
-	if (!info) {
-		info = __vmalloc(sz, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY,
-				 PAGE_KERNEL);
-		if (!info)
-			return NULL;
-	}
+	info = kvmalloc(sz, GFP_KERNEL);
+	if (!info)
+		return NULL;
+
 	memset(info, 0, sizeof(*info));
 	info->size = size;
 	return info;
-- 
2.11.0

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web