On 12/15/20 7:43 PM, Al Viro wrote: > On Mon, Dec 14, 2020 at 12:13:22PM -0700, Jens Axboe wrote: >> @@ -3140,6 +3149,12 @@ static const char *open_last_lookups(struct nameidata *nd, >> return ERR_CAST(dentry); >> if (likely(dentry)) >> goto finish_lookup; >> + /* >> + * We can't guarantee nonblocking semantics beyond this, if >> + * the fast lookup fails. >> + */ >> + if (nd->flags & LOOKUP_NONBLOCK) >> + return ERR_PTR(-EAGAIN); >> >> BUG_ON(nd->flags & LOOKUP_RCU); > > That can't be right - we already must have removed LOOKUP_RCU here > (see BUG_ON() right after that point). What is that test supposed > to catch? > > What am I missing here? Nothing I think, doesn't look like it's needed. If we don't return a valid dentry under LOOKUP_RCU, we will indeed have unlazied at this point. So this hunk can go. -- Jens Axboe