From: Mateusz Guzik <mguzik@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>,
Andrew Morton <akpm@linux-foundation.org>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Yann Droneaud <ydroneaud@opteya.com>,
Konstantin Khlebnikov <khlebnikov@yandex-team.ru>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH] fs: use a sequence counter instead of file_lock in fd_install
Date: Mon, 20 Apr 2015 15:41:04 +0200 [thread overview]
Message-ID: <20150420134103.GB2513@mguzik> (raw)
In-Reply-To: <1429386098.7346.260.camel@edumazet-glaptop2.roam.corp.google.com>
On Sat, Apr 18, 2015 at 12:41:38PM -0700, Eric Dumazet wrote:
> On Sat, 2015-04-18 at 00:02 +0100, Al Viro wrote:
> > On Sat, Apr 18, 2015 at 12:16:48AM +0200, Mateusz Guzik wrote:
> >
> > > I would say this makes the use of seq counter impossible. Even if we
> > > decided to fall back to a lock on retry, we cannot know what to do if
> > > the slot is reserved - it very well could be that something called
> > > close, and something else reserved the slot, so putting the file inside
> > > could be really bad. In fact we would be putting a file for which we
> > > don't have a reference anymore.
> > >
> > > However, not all hope is lost and I still think we can speed things up.
> > >
> > > A locking primitive which only locks stuff for current cpu and has
> > > another mode where it locks stuff for all cpus would do the trick just
> > > fine. I'm not a linux guy, quick search suggests 'lglock' would do what
> > > I want.
> > >
> > > table reallocation is an extremely rare operation, so this should be
> > > fine. It would take the lock 'globally' for given table.
> >
> > It would also mean percpu_alloc() for each descriptor table...
>
> I would rather use an xchg() instead of rcu_assign_ponter()
>
> old = xchg(&fdt->fd[fd], file);
> if (unlikely(old))
> filp_close(old, files);
>
> If threads are using close() on random fds, final result is not
> guaranteed anyway.
>
Well I don't see how could this be used to fix the problem.
If you are retrying and see NULL, you don't know whether your previous
update was not picked up by memcpy OR the fd got closed, which also
unreferenced the file you are installing. But you can't tell what
happened.
If you see non-NULL and what you found is not the file you are
installing, you know the file was freed so you can't close the old file.
One could try to introduce an invariant that files installed in a
lockless manner have to start with refcount 1, you still can't infer
anything from the fact that the counter is 1 when you retry (even if you
take the lock). It could have been duped, or even sent over a unix
socket and closed (although that awould surely require a solid pause in
execution) and who knows what else.
In general I would say this approach is too hard to get right to be
worthwile given expected speedup.
--
Mateusz Guzik
next prev parent reply other threads:[~2015-04-20 13:41 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-16 12:16 [RFC PATCH] fs: use a sequence counter instead of file_lock in fd_install Mateusz Guzik
2015-04-16 17:47 ` Eric Dumazet
2015-04-16 18:09 ` Al Viro
2015-04-16 20:42 ` Eric Dumazet
2015-04-16 20:55 ` Eric Dumazet
2015-04-16 22:00 ` Mateusz Guzik
2015-04-16 22:52 ` Eric Dumazet
2015-04-16 22:35 ` Mateusz Guzik
2015-04-17 21:46 ` Eric Dumazet
2015-04-17 22:16 ` Mateusz Guzik
2015-04-17 23:02 ` Al Viro
2015-04-18 19:41 ` Eric Dumazet
2015-04-20 13:41 ` Mateusz Guzik [this message]
2015-04-20 16:46 ` Eric Dumazet
2015-04-20 16:48 ` Eric Dumazet
2015-04-20 13:06 ` Mateusz Guzik
2015-04-20 13:43 ` Mateusz Guzik
2015-04-20 15:10 ` Mateusz Guzik
2015-04-20 17:15 ` Eric Dumazet
2015-04-20 20:49 ` Eric Dumazet
2015-04-21 18:05 ` Eric Dumazet
2015-04-21 20:06 ` Mateusz Guzik
2015-04-21 20:12 ` Mateusz Guzik
2015-04-21 21:06 ` Eric Dumazet
2015-04-22 4:59 ` [PATCH] fs/file.c: don't acquire files->file_lock in fd_install() Eric Dumazet
2015-04-27 19:05 ` Mateusz Guzik
2015-04-28 16:20 ` Eric Dumazet
2015-04-29 4:25 ` [PATCH v2] " Eric Dumazet
2015-06-22 2:32 ` Al Viro
2015-06-23 5:31 ` Eric Dumazet
2015-06-30 13:54 ` [PATCH v3] " Eric Dumazet
2015-04-22 13:31 ` [RFC PATCH] fs: use a sequence counter instead of file_lock in fd_install Mateusz Guzik
2015-04-22 13:55 ` Eric Dumazet
2015-04-21 20:57 ` Eric Dumazet
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=20150420134103.GB2513@mguzik \
--to=mguzik@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=eric.dumazet@gmail.com \
--cc=khlebnikov@yandex-team.ru \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=viro@ZenIV.linux.org.uk \
--cc=ydroneaud@opteya.com \
/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).