[Devel] [PATCH RHEL7 COMMIT] files: Add fdtable_align() helper
Konstantin Khorenko
khorenko at virtuozzo.com
Thu Jan 18 18:05:15 MSK 2018
The commit is pushed to "branch-rh7-3.10.0-693.11.6.vz7.42.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-693.11.6.vz7.42.1
------>
commit 022bd59b60589b48a242e6f4096da0cf56e187ea
Author: Kirill Tkhai <ktkhai at virtuozzo.com>
Date: Thu Jan 18 18:05:15 2018 +0300
files: Add fdtable_align() helper
Patchset description:
Shrink big fdtable on criu restore
This patchset allows to avoid memory overuse introduced by service fds on criu
restore.
The solution is simple: smartly check for closed fd number, and shrink fdtable
if this could be made. The checks are happen in is_pseudosuper mode, so we do
not affect performance on normal work mode.
The problem is we can't solve this for 100% case in userspace.
Kernel allows to fix that completely.
https://jira.sw.ru/browse/PSBM-78827
Eric Dumazet (1):
ms/fs/file.c: don't acquire files->file_lock in fd_install()
Kirill Tkhai (3):
files: Add new argument to expand_files()
files: Add fdtable_align() helper
files: Shrink big fdtable on close in is_pseudosuper mode
Mateusz Guzik (1):
ms/vfs: grab the lock instead of blocking in __fd_install during resizing
============================================================
This patch description:
Move alignment functionality from expand_fdtable() to separate function.
This will be used in next patch.
Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
Reviewed-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
fs/file.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/fs/file.c b/fs/file.c
index 9743283200e0..f009eb9bf1c8 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -84,11 +84,8 @@ static void copy_fdtable(struct fdtable *nfdt, struct fdtable *ofdt, bool shrink
memset((char *)(nfdt->close_on_exec) + cpy, 0, set);
}
-static struct fdtable * alloc_fdtable(unsigned int nr)
+static unsigned int fdtable_align(unsigned int nr)
{
- struct fdtable *fdt;
- void *data;
-
/*
* Figure out how many fds we actually want to support in this fdtable.
* Allocation steps are keyed to the size of the fdarray, since it
@@ -110,6 +107,16 @@ static struct fdtable * alloc_fdtable(unsigned int nr)
if (unlikely(nr > sysctl_nr_open))
nr = ((sysctl_nr_open - 1) | (BITS_PER_LONG - 1)) + 1;
+ return nr;
+}
+
+static struct fdtable * alloc_fdtable(unsigned int nr)
+{
+ struct fdtable *fdt;
+ void *data;
+
+ nr = fdtable_align(nr);
+
fdt = kmalloc(sizeof(struct fdtable), GFP_KERNEL_ACCOUNT);
if (!fdt)
goto out;
More information about the Devel
mailing list