On 12/25/20 9:50 PM, Al Viro wrote: > On Fri, Dec 25, 2020 at 07:41:17PM -0700, Jens Axboe wrote: >> On 12/17/20 9:19 AM, Jens Axboe wrote: >>> Most callers check for non-zero return, and assume it's -ECHILD (which >>> it always will be). One caller uses the actual error return. Clean this >>> up and make it fully consistent, by having unlazy_walk() return a bool >>> instead. Rename it to try_to_unlazy() and return true on success, and >>> failure on error. That's easier to read. >> >> Al, were you planning on queuing this one up for 5.11 still? I'm fine >> with holding for 5.12 as well, would just like to know what your plans >> are. Latter goes for the whole series too, fwiw. > > Seeing that it has not sat in -next at all, what I'm going to do is > to put it into 5.11-rc1-based branch. It's really been too late for > something like that for this cycle and IME a topic branch started > before the merges for previous cycle are over is too likely to require > backmerges, if not outright rebases. So let's branch it at -rc1 and > it'll go into #for-next from the very beginning. That sounds fine, thanks Al. Will you queue up 1-3 in a stable branch? Then I can just pull that into mine for the io_uring bits. I'll also then post the stat part of this too, for separate review. BTW, I wrote a man page addition for openat2(2) for RESOLVE_CACHED: commit 3b381a6bc50da79eee6a3a1da330480d0cb46302 Author: Jens Axboe <axboe@xxxxxxxxx> Date: Thu Dec 17 14:15:15 2020 -0700 man2/openat2.2: add RESOLVE_CACHED RESOLVE_CACHED allows an application to attempt a cache-only open of a file. If this isn't possible, the request will fail with -1/EAGAIN and the caller should retry without RESOLVE_CACHED set. This will generally happen from a different context, where a slower open operation can be performed. Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> diff --git a/man2/openat2.2 b/man2/openat2.2 index 3bda20620574..f5af3eee2cda 100644 --- a/man2/openat2.2 +++ b/man2/openat2.2 @@ -385,6 +385,17 @@ This may occur if, for example, a system pathname that is used by an application is modified (e.g., in a new distribution release) so that a pathname component (now) contains a bind mount. +.TP +.B RESOLVE_CACHED +Make the open operation fail unless all path components are already present +in the kernels lookup cache. +If any kind of revalidation or IO is needed to satisfy the lookup, +.BR openat2 () +fails with the error +.B EAGAIN. +This is useful in providing a fast path open that can be performed without +resorting to thread offload, or other mechanism that an application might +use to offload slower operations. .RE .IP If any bits other than those listed above are set in @@ -421,6 +432,14 @@ The caller may choose to retry the .BR openat2 () call. .TP +.B EAGAIN +.BR RESOLVE_CACHED +was set, and the open operation cannot be performed cached. +The caller should retry without +.B RESOLVE_CACHED +set in +.I how.resolve +.TP .B EINVAL An unknown flag or invalid value was specified in .IR how . -- Jens Axboe