netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* RFC: conntrack: use mod_timer_pending()
@ 2009-06-10 13:05 Patrick McHardy
  2009-06-10 13:07 ` Patrick McHardy
  2009-06-11  6:43 ` Martin Josefsson
  0 siblings, 2 replies; 6+ messages in thread
From: Patrick McHardy @ 2009-06-10 13:05 UTC (permalink / raw)
  To: Netfilter Development Mailinglist, Martin Josefsson

[-- Attachment #1: Type: text/plain, Size: 249 bytes --]

This patch changes conntrack to use the new mod_timer_pending()
function, which only rearms the timer if it was still active.
This allows to only grab the lock in __nf_ct_refresh_acct when
accounting is used.

Anyone seing anything wrong with this?

[-- Attachment #2: x --]
[-- Type: text/plain, Size: 1349 bytes --]

diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index edf9569..2737f5d 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -807,8 +807,6 @@ void __nf_ct_refresh_acct(struct nf_conn *ct,
 	NF_CT_ASSERT(ct->timeout.data == (unsigned long)ct);
 	NF_CT_ASSERT(skb);
 
-	spin_lock_bh(&nf_conntrack_lock);
-
 	/* Only update if this is not a fixed timeout */
 	if (test_bit(IPS_FIXED_TIMEOUT_BIT, &ct->status))
 		goto acct;
@@ -822,11 +820,8 @@ void __nf_ct_refresh_acct(struct nf_conn *ct,
 		/* 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);
-		}
+		if (newtime - ct->timeout.expires >= HZ)
+			mod_timer_pending(&ct->timeout, newtime);
 	}
 
 acct:
@@ -835,13 +830,13 @@ acct:
 
 		acct = nf_conn_acct_find(ct);
 		if (acct) {
+			spin_lock_bh(&nf_conntrack_lock);
 			acct[CTINFO2DIR(ctinfo)].packets++;
 			acct[CTINFO2DIR(ctinfo)].bytes +=
 				skb->len - skb_network_offset(skb);
+			spin_unlock_bh(&nf_conntrack_lock);
 		}
 	}
-
-	spin_unlock_bh(&nf_conntrack_lock);
 }
 EXPORT_SYMBOL_GPL(__nf_ct_refresh_acct);
 

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-06-11  7:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-10 13:05 RFC: conntrack: use mod_timer_pending() Patrick McHardy
2009-06-10 13:07 ` Patrick McHardy
2009-06-10 14:51   ` Stephen Hemminger
2009-06-10 14:53     ` Patrick McHardy
2009-06-10 15:07       ` Stephen Hemminger
2009-06-11  6:43 ` Martin Josefsson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).