Hi, After the discussion yesterday, I reworked some of the bits since the v1 posting: - Improved the 1/5 cleanup patch, based on Al's feedback. - 2/5 is much cleaner now, also based on Al's feedback. For later patches, we also need the same LOOKUP_NONBLOCK failure case in unlazy_child(), so I added that. Also fixed the LOOKUP_NONBLOCK check in path_init(). - Add mnt_want_write_trylock(). Since we already have sb_start_write_trylock(), this is pretty trivial. - Add 4/5 which handles LOOKUP_NONBLOCK for open_last_lookups(), do_open(), and do_tmpfile(). O_TRUNC is expressly not allowed with LOOKUP_NONBLOCK/RESOLVE_NONBLOCK, so I didn't want to attempt to wire up nonblocking semantics there. - Fixed comment in 5/5, and added the O_TRUNC check there too. No further changes there. I'll commit to writing the change for the openat2(2) man page as well, as well as some test cases, once we make some more progress on the kernel side. Ran this through some basic testing with both io_uring (that patch I left out of this series) and openat2(), and works for me... -- Jens Axboe