Commit be00c8e4 authored by Martin Josefsson's avatar Martin Josefsson Committed by David S. Miller

[NETFILTER]: nf_conntrack: reduce timer updates in __nf_ct_refresh_acct()

Only update the conntrack timer if there's been at least HZ jiffies since
the last update. Reduces the number of del_timer/add_timer cycles from one
per packet to one per connection per second (plus once for each state change
of a connection)

Should handle timer wraparounds and connection timeout changes.
Signed-off-by: default avatarMartin Josefsson <gandalf@wlug.westbo.se>
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
parent 824621ed
...@@ -864,9 +864,14 @@ void __nf_ct_refresh_acct(struct nf_conn *ct, ...@@ -864,9 +864,14 @@ void __nf_ct_refresh_acct(struct nf_conn *ct,
ct->timeout.expires = extra_jiffies; ct->timeout.expires = extra_jiffies;
event = IPCT_REFRESH; event = IPCT_REFRESH;
} else { } else {
/* Need del_timer for race avoidance (may already be dying). */ unsigned long newtime = jiffies + extra_jiffies;
if (del_timer(&ct->timeout)) {
ct->timeout.expires = jiffies + extra_jiffies; /* Only update the timeout if the new timeout is at least
HZ jiffies from the old timeout. Need del_timer for race
avoidance (may already be dying). */
if (newtime - ct->timeout.expires >= HZ
&& del_timer(&ct->timeout)) {
ct->timeout.expires = newtime;
add_timer(&ct->timeout); add_timer(&ct->timeout);
event = IPCT_REFRESH; event = IPCT_REFRESH;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment