All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Drokin <green@linuxhacker.ru>
To: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Mailing List <linux-kernel@vger.kernel.org>,
	"<linux-fsdevel@vger.kernel.org>" <linux-fsdevel@vger.kernel.org>
Subject: Re: More parallel atomic_open/d_splice_alias fun with NFS and possibly more FSes.
Date: Tue, 5 Jul 2016 14:12:37 -0400	[thread overview]
Message-ID: <53902B2E-10E5-4CC1-B05B-D962D3C69FC5@linuxhacker.ru> (raw)
In-Reply-To: <20160705174207.GN14480@ZenIV.linux.org.uk>


On Jul 5, 2016, at 1:42 PM, Al Viro wrote:

> On Tue, Jul 05, 2016 at 11:21:32AM -0400, Oleg Drokin wrote:
>>> ...
>>> -       if (d_unhashed(*de)) {
>>> +       if (d_in_lookup(*de)) {
>>>                struct dentry *alias;
>>> 
>>>                alias = ll_splice_alias(inode, *de);
>> 
>> This breaks Lustre because we now might progress further in this function
>> without calling into ll_splice_alias and that's the only place that we do
>> ll_d_init() that later code depends on so we violently crash next time
>> we call e.g. d_lustre_revalidate() further down that code.
> 
> Huh?  How the hell do those conditions differ there?

Like explained in my other email, because this is in a normal
lookup path, we can get here with a new dentry that was allocated in
__hash_lookup via d_alloc (not parallel) that's not marked with the PAR bit.

>> Also I still wonder what's to stop d_alloc_parallel() from returning
>> a hashed dentry with d_in_lookup() still true?
> 
> The fact that such dentries do not exist at any point?
> 
>> Certainly there's a big gap between hashing the dentry and dropping the PAR
>> bit in there that I imagine might allow __d_lookup_rcu() to pick it up
>> in between?--
> 
> WTF?  Where do you see that gap?  in-lookup dentries get hashed only in one
> place - __d_add().  And there (besides holding ->d_lock around both) we
> drop that bit in flags *before* _d_rehash().  AFAICS, the situation with
> barriers is OK there, due to lockref_get_not_dead() serving as ACQUIRE
> operation; I could be missing something subtle, but a wide gap...  Where?

Oh! I see, I missed that __d_add drops the PAR bit as well, not just the code
at the end of the call that does d_alloc_parallel.
Then indeed there is no gap, sorry for the false alarm.

  reply	other threads:[~2016-07-05 18:12 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-17  4:09 More parallel atomic_open/d_splice_alias fun with NFS and possibly more FSes Oleg Drokin
2016-06-17  4:29 ` Al Viro
2016-06-25 16:38   ` Oleg Drokin
2016-07-03  6:29     ` Al Viro
2016-07-04  0:08       ` Al Viro
2016-07-04  0:37         ` Oleg Drokin
2016-07-04  0:37           ` Oleg Drokin
2016-07-04  3:08           ` Al Viro
2016-07-04  3:55             ` Oleg Drokin
2016-07-04  3:55               ` Oleg Drokin
2016-07-05  2:25               ` Al Viro
2016-07-10 17:01                 ` Oleg Drokin
2016-07-10 18:14                   ` James Simmons
2016-07-11  1:01                     ` Al Viro
2016-07-11  1:03                       ` Al Viro
2016-07-11 22:54                         ` lustre sendmsg stuff Oleg Drokin
2016-07-11 17:15                       ` More parallel atomic_open/d_splice_alias fun with NFS and possibly more FSes James Simmons
2016-07-05  2:28       ` Oleg Drokin
2016-07-05  2:32         ` Oleg Drokin
2016-07-05  4:43         ` Oleg Drokin
2016-07-05  6:22       ` Oleg Drokin
2016-07-05 12:31         ` Al Viro
2016-07-05 13:51           ` Al Viro
2016-07-05 15:21             ` Oleg Drokin
2016-07-05 17:42               ` Al Viro
2016-07-05 18:12                 ` Oleg Drokin [this message]
2016-07-05 16:33             ` Oleg Drokin
2016-07-05 18:08               ` Al Viro
2016-07-05 19:12                 ` Oleg Drokin
2016-07-05 20:08                   ` Al Viro
2016-07-05 20:21                     ` Oleg Drokin
2016-07-06  0:29                       ` Oleg Drokin
2016-07-06  3:20                         ` Al Viro
2016-07-06  3:25                           ` Oleg Drokin
2016-07-06  3:25                             ` Oleg Drokin
2016-07-06  4:35                             ` Oleg Drokin
2016-07-06  4:35                               ` Oleg Drokin
2016-07-06 16:24             ` Oleg Drokin

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=53902B2E-10E5-4CC1-B05B-D962D3C69FC5@linuxhacker.ru \
    --to=green@linuxhacker.ru \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@ZenIV.linux.org.uk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.