diff --git a/include/kerndat.h b/include/kerndat.h index 1f511cf82..12517d123 100644 --- a/include/kerndat.h +++ b/include/kerndat.h @@ -16,7 +16,6 @@ extern int kerndat_get_dirty_track(void); struct kerndat_s { dev_t shmem_dev; - int tcp_max_wshare; int tcp_max_rshare; int last_cap; u64 zero_page_pfn; diff --git a/kerndat.c b/kerndat.c index 68c3e35c6..7855066f7 100644 --- a/kerndat.c +++ b/kerndat.c @@ -19,7 +19,6 @@ #include "util.h" struct kerndat_s kdat = { - .tcp_max_wshare = 2U << 20, .tcp_max_rshare = 3U << 20, }; @@ -197,7 +196,6 @@ static int tcp_read_sysctl_limits(void) int ret; struct sysctl_req req[] = { - { "net/ipv4/tcp_wmem", &vect[0], CTL_U32A(ARRAY_SIZE(vect[0])) }, { "net/ipv4/tcp_rmem", &vect[1], CTL_U32A(ARRAY_SIZE(vect[1])) }, { }, }; @@ -212,13 +210,12 @@ static int tcp_read_sysctl_limits(void) goto out; } - kdat.tcp_max_wshare = min(kdat.tcp_max_wshare, (int)vect[0][2]); kdat.tcp_max_rshare = min(kdat.tcp_max_rshare, (int)vect[1][2]); - if (kdat.tcp_max_wshare < 128 || kdat.tcp_max_rshare < 128) + if (kdat.tcp_max_rshare < 128) pr_warn("The memory limits for TCP queues are suspiciously small\n"); out: - pr_debug("TCP queue memory limits are %d:%d\n", kdat.tcp_max_wshare, kdat.tcp_max_rshare); + pr_debug("TCP recv queue memory limit is %d\n", kdat.tcp_max_rshare); return 0; } diff --git a/sk-tcp.c b/sk-tcp.c index 3ef70152b..e280ee68b 100644 --- a/sk-tcp.c +++ b/sk-tcp.c @@ -456,7 +456,7 @@ static int restore_tcp_seqs(int sk, TcpStreamEntry *tse) static int __send_tcp_queue(int sk, int queue, u32 len, struct cr_img *img) { int ret, err = -1; - int off, max; + int off; char *buf; buf = xmalloc(len); @@ -466,10 +466,12 @@ static int __send_tcp_queue(int sk, int queue, u32 len, struct cr_img *img) if (read_img_buf(img, buf, len) < 0) goto err; - max = (queue == TCP_SEND_QUEUE) ? kdat.tcp_max_wshare : kdat.tcp_max_rshare; off = 0; while (len) { - int chunk = (len > max ? max : len); + int chunk = len; + + if (queue == TCP_RECV_QUEUE && len > kdat.tcp_max_rshare) + chunk = kdat.tcp_max_rshare; ret = send(sk, buf + off, chunk, 0); if (ret <= 0) {