From c5422e8ddd03201939be1fd0fba05972bcc3c0cd Mon Sep 17 00:00:00 2001 From: Michael Blizek Date: Sun, 23 Feb 2020 13:37:14 +0100 Subject: [PATCH] global bufferspace limit --- net/cor/forward.c | 13 +++++++------ net/cor/settings.h | 3 ++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/net/cor/forward.c b/net/cor/forward.c index 0cdbf82897e9..0379d5d1ce9b 100644 --- a/net/cor/forward.c +++ b/net/cor/forward.c @@ -48,7 +48,7 @@ void bufsize_init(struct conn *cn_l, __u32 bufsize) cn_l->bufsize.act.noact.bytesleft = bufsize * 4; } -#warning todo out-of-bufspace recovery +#warning todo reset stalled conns on low memory int account_bufspace(struct conn *cn_l) { __u64 space_needed = 0; @@ -61,13 +61,15 @@ int account_bufspace(struct conn *cn_l) } #warning todo account ooo data + drop ooo packets if space exhausted - #warning todo limit space per conn (oom) if (cn_l->bufspace_accounted == space_needed) return atomic64_read(&bufused_sum) >= BUFUSAGE_GLOBAL_MAX ? 1 : 0; - if (unlikely(space_needed == U32_MAX)) + if (space_needed >= BUFUSAGE_PER_CONN_MAX) + space_req = BUFUSAGE_PER_CONN_MAX; + + if (unlikely(space_needed >= U32_MAX)) space_req = U32_MAX; else space_req = space_needed; @@ -118,9 +120,8 @@ void update_windowlimit(struct conn *src_in_l) else if (bufsize > WINDOW_MAX_PER_CONN_MAX) bufsize = WINDOW_MAX_PER_CONN_MAX; - #warning todo activate global buffer limit - /* if (account_bufspace(src_in_l)) - bufsize = WINDOW_MAX_PER_CONN_MIN; */ + if (account_bufspace(src_in_l)) + bufsize = WINDOW_MAX_PER_CONN_MIN; /* printk(KERN_ERR "window %p %u %u", src_in_l, bufsize, src_in_l->data_buf.read_remaining); */ diff --git a/net/cor/settings.h b/net/cor/settings.h index ac259f0e06ae..55ed70a799f3 100644 --- a/net/cor/settings.h +++ b/net/cor/settings.h @@ -52,8 +52,9 @@ #define WINDOW_ENCODE_MIN 64 #define WINDOW_MAX_PER_CONN_MIN 64 -#define WINDOW_MAX_PER_CONN_MAX 1048576 +#define WINDOW_MAX_PER_CONN_MAX 524288 +#define BUFUSAGE_PER_CONN_MAX 1048576 #define BUFUSAGE_GLOBAL_MAX 2097152 -- 2.11.4.GIT