[CRIU] [PATCH] socket: values of snd and rcv buffer should be divide into two

Andrey Vagin avagin at openvz.org
Tue Oct 27 08:00:52 PDT 2015


From: Andrew Vagin <avagin at openvz.org>

This values will be doubled in kernel to account for
"struct sk_buff" etc. overhead.

Currently criu restores snd and rcv buffer limits incorrectly,
they become bigger on each iteration.
$ ../crit show dump/zdtm/live/static/socket-tcp/6299/1/inetsk.img | grep buf
                "so_sndbuf": 2626560,
                "so_rcvbuf": 1060720,
                "so_sndbuf": 16384,
                "so_rcvbuf": 87380,
$ ../crit show dump/zdtm/live/static/socket-tcp/6299/2/inetsk.img | grep buf
                "so_sndbuf": 5253120,
                "so_rcvbuf": 2121440,
                "so_sndbuf": 32768,
                "so_rcvbuf": 174760,
$ ../crit show dump/zdtm/live/static/socket-tcp/6299/3/inetsk.img | grep buf
                "so_sndbuf": 10506240,
                "so_rcvbuf": 4242880,
                "so_sndbuf": 65536,
                "so_rcvbuf": 349520,

With-help-of: Pavel Emelyanov <xemul at parallels.com>
Signed-off-by: Andrew Vagin <avagin at openvz.org>
---
 sockets.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sockets.c b/sockets.c
index 40e59a1..f4ffd0e 100644
--- a/sockets.c
+++ b/sockets.c
@@ -419,7 +419,8 @@ int restore_socket_opts(int sk, SkOptsEntry *soe)
 {
 	int ret = 0, val;
 	struct timeval tv;
-	u32 bufs[2] = { soe->so_sndbuf, soe->so_rcvbuf };
+	/* In kernel a bufsize value is doubled. */
+	u32 bufs[2] = { soe->so_sndbuf / 2, soe->so_rcvbuf / 2};
 
 	pr_info("%d restore sndbuf %d rcv buf %d\n", sk, soe->so_sndbuf, soe->so_rcvbuf);
 
-- 
2.4.3



More information about the CRIU mailing list