There were a few places that were incorrectly testing for whether an open(2) operation was O_TMPFILE by doing (flags & O_TMPFILE). As O_TMPFILE is defined as __O_TMPFILE|O_DIRECTORY, this would cause the code to assume that O_DIRECTORY is equivalent to O_TMPFILE. The only places where this happened were in RESOLVE_CACHED and io_uring's checking related to RESOLVE_CACHED, so the only bug this really fixes is that now O_DIRECTORY will no longer cause RESOLVE_CACHED to always fail with -EAGAIN (and io_uring will thus be faster when doing O_DIRECTORY opens). Signed-off-by: Aleksa Sarai <cyphar@xxxxxxxxxx> --- Changes in v2: - fix io_uring's io_openat_force_async as well. - v1: <https://lore.kernel.org/r/20230806-resolve_cached-o_tmpfile-v1-1-7ba16308465e@xxxxxxxxxx> --- Aleksa Sarai (2): open: make RESOLVE_CACHED correctly test for O_TMPFILE io_uring: correct check for O_TMPFILE fs/open.c | 2 +- io_uring/openclose.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) --- base-commit: bf5ad7af0516cb47121dae1b1c160e4385615274 change-id: 20230806-resolve_cached-o_tmpfile-978cb238bd68 Best regards, -- Aleksa Sarai <cyphar@xxxxxxxxxx>