Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1654374 > unrolled thread
| Started by | Michal Hocko <mhocko@kernel.org> |
|---|---|
| First post | 2017-05-31 18:00 +0200 |
| Last post | 2017-05-31 18:00 +0200 |
| Articles | 3 — 1 participant |
Back to article view | Back to linux.kernel
[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
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-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]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-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]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-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