netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Florian Westphal <fw@strlen.de>
Cc: netfilter-devel@vger.kernel.org
Subject: Re: [PATCH v3] netfilter: conntrack: remove timer from ecache extension
Date: Wed, 25 Jun 2014 19:06:36 +0200	[thread overview]
Message-ID: <20140625170636.GA16571@localhost> (raw)
In-Reply-To: <20140611092015.GA12405@breakpoint.cc>

Hi Florian,

On Wed, Jun 11, 2014 at 11:20:15AM +0200, Florian Westphal wrote:
> Pablo Neira Ayuso <pablo@netfilter.org> wrote:
> > On Tue, Jun 10, 2014 at 11:12:56PM +0200, Florian Westphal wrote:
> > > This brings the (per-conntrack) ecache extension back to 24 bytes in size
> > > (was 152 byte on x86_64 with lockdep on).
> > > 
> > > When event delivery fails, re-delivery is attempted via work queue.
> > > 
> > > Redelivery is attempted at least every 0.1 seconds, but can happen
> > > more frequently if userspace is not congested.
> > > 
> > > The nf_ct_release_dying_list() function is removed.
> > > With this patch, ownership of the to-be-redelivered conntracks
> > > (on-dying-list-with-DYING-bit not yet set) is with the work queue,
> > > which will release the references once event is out.
> > 
> > I think we need to keep the nf_ct_release_dying_list(), otherwise we
> > will hit problems when destroying the kmem_cache, since the workqueue
> > may race with that, right?
> 
> Are you sure?
> 
> nf_ct_release_dying_list() looks broken to me, it _puts() entries
> it doesn't own (i.e. refcnt underflows when real owner _puts() entry).
> 
> In any case, nf_conntrack_cleanup_net_list() loops until
> net->ct.count is zero.  That should be enough, no?
> 
> If there are lot of entries with undelivered events the wait period should
> not be big; Since there are no listeners at this point the worker will be
> rescheduled for immediate reexecuition until it has put() all conntracks
> without DYING set.

Yes, there should be no listeners at this point since
nf_conntrack_netlink modules needs to be removed before nf_conntrack.

> nf_conntrack_ecache_pernet_fini() (which stops the work queue) is called
> after ct.count is 0 and before kmem_cache_destroy().  Looks good to me,
> did I miss something?

This patch looks good to me. I made some experiments again in my
testbed. I see no packet drops and the result of 'conntrack -L dying |
wc -l' per second shows small peaks of entries waiting in the dying
list to be delivered which is followed by empty lists by conntrackd at
some point. However, perhaps the per-second watch is not enough to get
a real evolution on how the dying list population evolves along time.

Anyway, I think this is good enough to get rid of the extra timer. We
can enqueue this patch to 3.17, unless you have any objection.

Let me know, thanks.

  reply	other threads:[~2014-06-25 17:06 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-10 21:12 [PATCH v3] netfilter: conntrack: remove timer from ecache extension Florian Westphal
2014-06-11  8:55 ` Pablo Neira Ayuso
2014-06-11  9:20   ` Florian Westphal
2014-06-25 17:06     ` Pablo Neira Ayuso [this message]
2014-06-25 17:13       ` Florian Westphal
2014-06-25 17:22         ` Pablo Neira Ayuso

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=20140625170636.GA16571@localhost \
    --to=pablo@netfilter.org \
    --cc=fw@strlen.de \
    --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).