From: pablo@netfilter.org
To: netfilter-devel@vger.kernel.org
Cc: davem@davemloft.net, netdev@vger.kernel.org
Subject: [PATCH 12/23] netfilter: nf_ct_ecache: refactor nf_ct_deliver_cached_events
Date: Thu, 8 Mar 2012 02:01:01 +0100 [thread overview]
Message-ID: <1331168472-5820-13-git-send-email-pablo@netfilter.org> (raw)
In-Reply-To: <1331168472-5820-1-git-send-email-pablo@netfilter.org>
From: Tony Zelenoff <antonz@parallels.com>
* identation lowered
* some CPU cycles saved at delayed item variable initialization
Signed-off-by: Tony Zelenoff <antonz@parallels.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
net/netfilter/nf_conntrack_ecache.c | 55 ++++++++++++++++++----------------
1 files changed, 29 insertions(+), 26 deletions(-)
diff --git a/net/netfilter/nf_conntrack_ecache.c b/net/netfilter/nf_conntrack_ecache.c
index aa15977..5bd3047d 100644
--- a/net/netfilter/nf_conntrack_ecache.c
+++ b/net/netfilter/nf_conntrack_ecache.c
@@ -32,9 +32,11 @@ static DEFINE_MUTEX(nf_ct_ecache_mutex);
void nf_ct_deliver_cached_events(struct nf_conn *ct)
{
struct net *net = nf_ct_net(ct);
- unsigned long events;
+ unsigned long events, missed;
struct nf_ct_event_notifier *notify;
struct nf_conntrack_ecache *e;
+ struct nf_ct_event item;
+ int ret;
rcu_read_lock();
notify = rcu_dereference(net->ct.nf_conntrack_event_cb);
@@ -47,31 +49,32 @@ void nf_ct_deliver_cached_events(struct nf_conn *ct)
events = xchg(&e->cache, 0);
- if (nf_ct_is_confirmed(ct) && !nf_ct_is_dying(ct) && events) {
- struct nf_ct_event item = {
- .ct = ct,
- .pid = 0,
- .report = 0
- };
- int ret;
- /* We make a copy of the missed event cache without taking
- * the lock, thus we may send missed events twice. However,
- * this does not harm and it happens very rarely. */
- unsigned long missed = e->missed;
-
- if (!((events | missed) & e->ctmask))
- goto out_unlock;
-
- ret = notify->fcn(events | missed, &item);
- if (unlikely(ret < 0 || missed)) {
- spin_lock_bh(&ct->lock);
- if (ret < 0)
- e->missed |= events;
- else
- e->missed &= ~missed;
- spin_unlock_bh(&ct->lock);
- }
- }
+ if (!nf_ct_is_confirmed(ct) || nf_ct_is_dying(ct) || !events)
+ goto out_unlock;
+
+ /* We make a copy of the missed event cache without taking
+ * the lock, thus we may send missed events twice. However,
+ * this does not harm and it happens very rarely. */
+ missed = e->missed;
+
+ if (!((events | missed) & e->ctmask))
+ goto out_unlock;
+
+ item.ct = ct;
+ item.pid = 0;
+ item.report = 0;
+
+ ret = notify->fcn(events | missed, &item);
+
+ if (likely(ret >= 0 && !missed))
+ goto out_unlock;
+
+ spin_lock_bh(&ct->lock);
+ if (ret < 0)
+ e->missed |= events;
+ else
+ e->missed &= ~missed;
+ spin_unlock_bh(&ct->lock);
out_unlock:
rcu_read_unlock();
--
1.7.7.3
next prev parent reply other threads:[~2012-03-08 1:01 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-08 1:00 [PATCH 00/23] netfilter updates for net-next pablo
2012-03-08 1:00 ` [PATCH 01/23] netfilter: ipset: use NFPROTO_ constants pablo
2012-03-08 1:00 ` [PATCH 02/23] netfilter: ipset: expose userspace-relevant parts in ip_set.h pablo
2012-03-08 1:00 ` [PATCH 03/23] netfilter: ipset: Log warning when a hash type of set gets full pablo
2012-03-08 1:00 ` [PATCH 04/23] netfilter: ipset: Exceptions support added to hash:*net* types pablo
2012-03-08 1:00 ` [PATCH 05/23] netfilter: ipset: hash:net,iface timeout bug fixed pablo
2012-03-08 1:00 ` [PATCH 06/23] netfilter: ctnetlink: allow to set helper for new expectations pablo
2012-03-08 1:00 ` [PATCH 07/23] netfilter: ctnetlink: allow to set expectation class pablo
2012-03-08 1:00 ` [PATCH 08/23] netfilter: ctnetlink: add NAT support for expectations pablo
2012-03-08 1:00 ` [PATCH 09/23] netfilter: ctnetlink: allow to set expectfn " pablo
2012-03-08 1:00 ` [PATCH 10/23] netfilter: merge ipt_LOG and ip6_LOG into xt_LOG pablo
2012-03-08 1:01 ` [PATCH 11/23] netfilter: nf_ct_ecache: trailing whitespace removed pablo
2012-03-08 1:01 ` pablo [this message]
2012-03-08 1:01 ` [PATCH 13/23] netfilter: remove ipt_SAME.h and ipt_realm.h pablo
2012-03-08 1:01 ` [PATCH 14/23] netfilter: xt_LOG: fix bogus extra layer-4 logging information pablo
2012-03-08 1:01 ` [PATCH 15/23] netfilter: ctnetlink: fix lockep splats pablo
2012-03-08 1:01 ` [PATCH 16/23] netfilter: nf_ct_udp[lite]: convert UDP[lite] timeouts to array pablo
2012-03-08 1:01 ` [PATCH 17/23] netfilter: nf_ct_tcp: move retransmission and unacknowledged timeout " pablo
2012-03-08 1:01 ` [PATCH 18/23] netfilter: nf_ct_gre: add unsigned int array to define timeouts pablo
2012-03-08 1:01 ` [PATCH 19/23] netfilter: nf_conntrack: pass timeout array to l4->new and l4->packet pablo
2012-03-08 1:01 ` [PATCH 20/23] netfilter: add cttimeout infrastructure for fine timeout tuning pablo
2012-03-08 1:01 ` [PATCH 21/23] netfilter: nf_ct_ext: add timeout extension pablo
2012-03-08 1:01 ` [PATCH 22/23] netfilter: xt_CT: allow to attach timeout policy + glue code pablo
2012-03-08 1:01 ` [PATCH 23/23] netfilter: xt_LOG: add __printf() to sb_add() pablo
2012-03-08 6:48 ` [PATCH 00/23] netfilter updates for net-next David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1331168472-5820-13-git-send-email-pablo@netfilter.org \
--to=pablo@netfilter.org \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).