kernel: fix flow offload issues with pppoe
[openwrt/staging/chunkeey.git] / target / linux / generic / pending-5.15 / 704-00-netfilter-flowtable-fix-excessive-hw-offload-attempt.patch
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 (file)
index 0000000..c03cb5a
--- /dev/null
@@ -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;