Re: [PATCH v10 4/5] io_uring: add fsetxattr and setxattr support
From: Al Viro <viro@zeniv.linux.org.uk>
Date: 2021-12-30 22:24:12
Also in:
io-uring
On Thu, Dec 30, 2021 at 11:09:12AM -0800, Jens Axboe wrote:
For each command, there are two steps:
- The prep of it, this happens inline from the system call where the
request, or requests, are submitted. The prep phase should ensure that
argument structs are stable. Hence a caller can prep a request and
have memory on stack, as long as it submits before it becomes invalid.
An example of that are iovecs for readv/writev. The caller does not
need to have them stable for the duration of the request, just across
submit. That's the io_${cmd}_prep() helpers.
- The execution of it. May be separate from prep and from an async
worker. Where the lower layers don't support a nonblocking attempt,
they are always done async. The statx stuff is an example of that.
Hence prep needs to copy from userland on the prep side always for the
statx family, as execution will happen out-of-line from the submission.
Does that explain it?The actual call chain leading to filename_lookup() is, AFAICS, this: io_statx() do_statx() vfs_statx() user_path_at() user_path_at_empty() filename_lookup() If you are providing such warranties for the contents of pathname arguments, you have a bug in statx in the mainline. If you are not, there's no point in doing getname() in getxattr prep. Which one it is?