[PATCH v9 0/5] io_uring: add xattr support

Stefan Roesch
2021-12-28T18:42:27Z

This adds the xattr support to io_uring. The intent is to have a more
complete support for file operations in io_uring.

This change adds support for the following functions to io_uring:
- fgetxattr
- fsetxattr
- getxattr
- setxattr

Patch 1: fs: split off do_user_path_at_empty from user_path_at_empty()
This splits off a new function do_user_path_at_empty from
user_path_at_empty that is based on filename and not on a
user-specified string.

Patch 2: fs: split off setxattr_copy and do_setxattr function from setxattr
Split off the setup part of the setxattr function in the setxattr_copy
function. Split off the processing part in do_setxattr.

Patch 3: fs: split off do_getxattr from getxattr
Split of the do_getxattr part from getxattr. This will
allow it to be invoked it from io_uring.

Patch 4: io_uring: add fsetxattr and setxattr support
This adds new functions to support the fsetxattr and setxattr
functions.

Patch 5: io_uring: add fgetxattr and getxattr support
This adds new functions to support the fgetxattr and getxattr
functions.

There are two additional patches:
liburing: Add support for xattr api's.
This also includes the tests for the new code.
xfstests: Add support for io_uring xattr support.

V9: - keep kvalue in struct xattr_ctx
V8: - introduce xattr_name struct as advised by Linus
- remove kname_sz field in xattr_ctx
V7: - split off setxattr in two functions as recommeneded by
Christian.
V6: - reverted addition of kname array to xattr_ctx structure
Adding the kname array increases the io_kiocb beyond 64 bytes
(increases it to 224 bytes). We try hard to limit it to 64 bytes.
Keeping the original interface also is a bit more efficient.
- addressed Pavel's reordering comment
- addressed Pavel's putname comment
- addressed Pavel's kvfree comment
- rebased on for-5.17/io_uring-getdents64
V5: - add kname array to xattr_ctx structure
V4: - rebased patch series
V3: - remove req->file checks in prep functions
- change size parameter in do_xattr
V2: - split off function do_user_path_empty instead of changing
the function signature of user_path_at
- Fix datatype size problem in do_getxattr

Stefan Roesch (5):
fs: split off do_user_path_at_empty from user_path_at_empty()
fs: split off setxattr_copy and do_setxattr function from setxattr
fs: split off do_getxattr from getxattr
io_uring: add fsetxattr and setxattr support
io_uring: add fgetxattr and getxattr support

fs/internal.h | 28 +++
fs/io_uring.c | 314 ++++++++++++++++++++++++++++++++++
fs/namei.c | 10 +-
fs/xattr.c | 114 ++++++++----
include/linux/namei.h | 2 +
include/uapi/linux/io_uring.h | 8 +-
6 files changed, 438 insertions(+), 38 deletions(-)

base-commit: b4518682080d3a1cdd6ea45a54ff6772b8b2797a
--
2.30.2