On Tue, Dec 15, 2020 at 08:29:40AM -0700, Jens Axboe wrote: > On 12/15/20 5:24 AM, Matthew Wilcox wrote: > > On Mon, Dec 14, 2020 at 12:13:22PM -0700, Jens Axboe wrote: > >> +++ b/fs/namei.c > >> @@ -686,6 +686,8 @@ static bool try_to_unlazy(struct nameidata *nd) > >> BUG_ON(!(nd->flags & LOOKUP_RCU)); > >> > >> nd->flags &= ~LOOKUP_RCU; > >> + if (nd->flags & LOOKUP_NONBLOCK) > >> + goto out1; > > > > If we try a walk in a non-blocking context, it fails, then we punt to > > a thread, do we want to prohibit that thread trying an RCU walk first? > > I can see arguments both ways -- this may only be a temporary RCU walk > > failure, or we may never be able to RCU walk this path. > > In my opinion, it's not worth it trying to over complicate matters by > handling the retry side differently. Better to just keep them the > same. We'd need a lookup anyway to avoid aliasing. but by clearing LOOKUP_RCU here, aren't you making the retry handle things differently? maybe i got lost.