Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -864,9 +864,14 @@ void __nf_ct_refresh_acct(struct nf_conn *ct,
		ct->timeout.expires = extra_jiffies;
		event = IPCT_REFRESH;
	} else {
		/* Need del_timer for race avoidance (may already be dying). */
		if (del_timer(&ct->timeout)) {
			ct->timeout.expires = jiffies + extra_jiffies;
		unsigned long newtime = 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);
			event = IPCT_REFRESH;
		}