On Fri, Dec 11, 2020 at 9:29 AM Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > Again, that part is trivial - what to do with do_open()/open_last_lookups() > is where the nastiness will be. Basically, it makes sure we bail out in > cases when lookup itself would've blocked, but it does *not* bail out > when equally heavy (and unlikely) blocking sources hit past the complete_walk(). See my other email - while you are obviously correct from a "must never sleep" standpoint, and from a general standpoint, from a practical standpoint I suspect it really doesn't matter. Exactly because it's not primarily a correctness issue, but a performance issue - and because people wouldn't use this for things like "open a named pipe that then blocks on the open side" use. I do agree that maybe that LOOKUP_NONBLOCK might then want to be also coupled with extra logic to also just fail if it turns out it's a special device file or whatever - I just think that ends up being a separate issue. For example, in user space, we already have alternate methods for that (ie O_NONBLOCK for fifo etc), and maybe io_uring wants that too. Linus