On Mon, Dec 14, 2020 at 12:13:23PM -0700, Jens Axboe wrote: > Now that we support non-blocking path resolution internally, expose it > via openat2() in the struct open_how ->resolve flags. This allows > applications using openat2() to limit path resolution to the extent that > it is already cached. > > If the lookup cannot be satisfied in a non-blocking manner, openat2(2) > will return -1/-EAGAIN. > > Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> > --- > fs/open.c | 6 ++++++ > include/linux/fcntl.h | 2 +- > include/uapi/linux/openat2.h | 4 ++++ > 3 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/fs/open.c b/fs/open.c > index 9af548fb841b..a83434cfe01c 100644 > --- a/fs/open.c > +++ b/fs/open.c > @@ -1087,6 +1087,12 @@ inline int build_open_flags(const struct open_how *how, struct open_flags *op) > lookup_flags |= LOOKUP_BENEATH; > if (how->resolve & RESOLVE_IN_ROOT) > lookup_flags |= LOOKUP_IN_ROOT; > + if (how->resolve & RESOLVE_NONBLOCK) { > + /* Don't bother even trying for create/truncate open */ > + if (flags & (O_TRUNC | O_CREAT)) > + return -EAGAIN; Why not O_TMPFILE here as well?