diff options
author | Felix Fietkau <nbd@nbd.name> | 2022-05-06 15:49:58 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2022-05-06 15:50:32 +0200 |
commit | 726ef8ba2dbe4d4a693c4d9300bc69e234e6d67d (patch) | |
tree | 41dd2adf4384dc28fc1d12a1020943e6dc73124f /target/linux/generic/pending-5.15/704-00-netfilter-flowtable-fix-excessive-hw-offload-attempt.patch | |
parent | cb1dc49c18e54fde6f8892d728c043b93dc995c3 (diff) | |
download | upstream-726ef8ba2dbe4d4a693c4d9300bc69e234e6d67d.tar.gz upstream-726ef8ba2dbe4d4a693c4d9300bc69e234e6d67d.tar.bz2 upstream-726ef8ba2dbe4d4a693c4d9300bc69e234e6d67d.zip |
kernel: fix flow offload issues with pppoe
sync xt_FLOWOFFLOAD code with latest version of nft_flow_offload
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'target/linux/generic/pending-5.15/704-00-netfilter-flowtable-fix-excessive-hw-offload-attempt.patch')
-rw-r--r-- | target/linux/generic/pending-5.15/704-00-netfilter-flowtable-fix-excessive-hw-offload-attempt.patch | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/target/linux/generic/pending-5.15/704-00-netfilter-flowtable-fix-excessive-hw-offload-attempt.patch b/target/linux/generic/pending-5.15/704-00-netfilter-flowtable-fix-excessive-hw-offload-attempt.patch new file mode 100644 index 0000000000..c03cb5ae46 --- /dev/null +++ b/target/linux/generic/pending-5.15/704-00-netfilter-flowtable-fix-excessive-hw-offload-attempt.patch @@ -0,0 +1,27 @@ +From: Felix Fietkau <nbd@nbd.name> +Date: Fri, 6 May 2022 12:37:23 +0200 +Subject: [PATCH] netfilter: flowtable: fix excessive hw offload attempts + after failure + +If a flow cannot be offloaded, the code currently repeatedly tries again as +quickly as possible, which can significantly increase system load. +Fix this by limiting flow timeout update and hardware offload retry to once +per second. + +Signed-off-by: Felix Fietkau <nbd@nbd.name> +--- + +--- a/net/netfilter/nf_flow_table_core.c ++++ b/net/netfilter/nf_flow_table_core.c +@@ -329,8 +329,10 @@ void flow_offload_refresh(struct nf_flow + u32 timeout; + + timeout = nf_flowtable_time_stamp + flow_offload_get_timeout(flow); +- if (READ_ONCE(flow->timeout) != timeout) ++ if (timeout - READ_ONCE(flow->timeout) > HZ) + WRITE_ONCE(flow->timeout, timeout); ++ else ++ return; + + if (likely(!nf_flowtable_hw_offload(flow_table))) + return; |