* [PATCH v3 0/2] io_uring: add fremovexattr and flistxattr support @ 2026-07-21 10:35 Aditya Prakash Srivastava 2026-07-21 10:35 ` [PATCH v3 1/2] fs: make file_listxattr and file_removexattr helpers non-static Aditya Prakash Srivastava 2026-07-21 10:35 ` [PATCH v3 2/2] io_uring: add fremovexattr and flistxattr support Aditya Prakash Srivastava 0 siblings, 2 replies; 6+ messages in thread From: Aditya Prakash Srivastava @ 2026-07-21 10:35 UTC (permalink / raw) To: Jens Axboe, Christian Brauner, Alexander Viro Cc: Jan Kara, io-uring, linux-fsdevel, linux-kernel, Aditya Prakash Srivastava This series completes io_uring's FD-based xattr operations by adding support for: - IORING_OP_FREMOVEXATTR - IORING_OP_FLISTXATTR This allows asynchronous xattr removal and listing. New test cases have been added to the liburing test suite (test/xattr.c) and verified to pass. A separate userspace patch implementing the matching prep helpers, sanitizers, and test cases is submitted in parallel. - Patch 1 makes the necessary VFS-layer list/remove helpers non-static and declares them in fs/internal.h. - Patch 2 implements the io_uring operational support (opcodes, opdefs, preparation, and issue handlers) and invokes these exposed helpers. Changes since v2: - Revert unnecessary formatting changes to filename_listxattr in Patch 1. Changes since v1: - Omit path-based opcodes to prioritize optimal FD-based variants. - Limit exported VFS helpers to only file_listxattr and file_removexattr. - Rewrite standalone test program into a standard liburing testcase. Aditya Prakash Srivastava (2): fs: make file_listxattr and file_removexattr helpers non-static io_uring: add fremovexattr and flistxattr support fs/internal.h | 2 + fs/xattr.c | 3 +- include/uapi/linux/io_uring.h | 2 + io_uring/opdef.c | 18 +++++++ io_uring/xattr.c | 74 +++++++++++++++++++++++++++++ io_uring/xattr.h | 6 +++ tools/include/uapi/linux/io_uring.h | 13 +++++ 7 files changed, 116 insertions(+), 2 deletions(-) -- 2.47.3 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 1/2] fs: make file_listxattr and file_removexattr helpers non-static 2026-07-21 10:35 [PATCH v3 0/2] io_uring: add fremovexattr and flistxattr support Aditya Prakash Srivastava @ 2026-07-21 10:35 ` Aditya Prakash Srivastava 2026-07-27 14:46 ` Jan Kara 2026-07-21 10:35 ` [PATCH v3 2/2] io_uring: add fremovexattr and flistxattr support Aditya Prakash Srivastava 1 sibling, 1 reply; 6+ messages in thread From: Aditya Prakash Srivastava @ 2026-07-21 10:35 UTC (permalink / raw) To: Jens Axboe, Christian Brauner, Alexander Viro Cc: Jan Kara, io-uring, linux-fsdevel, linux-kernel, Aditya Prakash Srivastava In preparation for adding IORING_OP_FREMOVEXATTR and IORING_OP_FLISTXATTR support in io_uring, we need to invoke the VFS-layer helpers from within io_uring. Make the following helpers non-static and declare them in fs/internal.h: - file_listxattr() - file_removexattr() No functional change is introduced. Signed-off-by: Aditya Prakash Srivastava <aditya.ansh182@gmail.com> --- fs/internal.h | 2 ++ fs/xattr.c | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/internal.h b/fs/internal.h index 355d93f92208..ee86b24db79a 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -297,6 +297,8 @@ int filename_setxattr(int dfd, struct filename *filename, unsigned int lookup_flags, struct kernel_xattr_ctx *ctx); int setxattr_copy(const char __user *name, struct kernel_xattr_ctx *ctx); int import_xattr_name(struct xattr_name *kname, const char __user *name); +ssize_t file_listxattr(struct file *f, char __user *list, size_t size); +int file_removexattr(struct file *f, struct xattr_name *kname); int may_write_xattr(struct mnt_idmap *idmap, struct inode *inode); diff --git a/fs/xattr.c b/fs/xattr.c index d58979115200..31b8a5eeec1e 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -953,7 +953,6 @@ listxattr(struct dentry *d, char __user *list, size_t size) return error; } -static ssize_t file_listxattr(struct file *f, char __user *list, size_t size) { audit_file(f); @@ -1036,7 +1035,7 @@ removexattr(struct mnt_idmap *idmap, struct dentry *d, const char *name) return vfs_removexattr(idmap, d, name); } -static int file_removexattr(struct file *f, struct xattr_name *kname) +int file_removexattr(struct file *f, struct xattr_name *kname) { int error = mnt_want_write_file(f); -- 2.47.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/2] fs: make file_listxattr and file_removexattr helpers non-static 2026-07-21 10:35 ` [PATCH v3 1/2] fs: make file_listxattr and file_removexattr helpers non-static Aditya Prakash Srivastava @ 2026-07-27 14:46 ` Jan Kara 0 siblings, 0 replies; 6+ messages in thread From: Jan Kara @ 2026-07-27 14:46 UTC (permalink / raw) To: Aditya Prakash Srivastava Cc: Jens Axboe, Christian Brauner, Alexander Viro, Jan Kara, io-uring, linux-fsdevel, linux-kernel On Tue 21-07-26 10:35:13, Aditya Prakash Srivastava wrote: > In preparation for adding IORING_OP_FREMOVEXATTR and > IORING_OP_FLISTXATTR support in io_uring, we need to invoke the VFS-layer > helpers from within io_uring. > > Make the following helpers non-static and declare them in fs/internal.h: > - file_listxattr() > - file_removexattr() > > No functional change is introduced. > > Signed-off-by: Aditya Prakash Srivastava <aditya.ansh182@gmail.com> Looks ok to me. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/internal.h | 2 ++ > fs/xattr.c | 3 +-- > 2 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/fs/internal.h b/fs/internal.h > index 355d93f92208..ee86b24db79a 100644 > --- a/fs/internal.h > +++ b/fs/internal.h > @@ -297,6 +297,8 @@ int filename_setxattr(int dfd, struct filename *filename, > unsigned int lookup_flags, struct kernel_xattr_ctx *ctx); > int setxattr_copy(const char __user *name, struct kernel_xattr_ctx *ctx); > int import_xattr_name(struct xattr_name *kname, const char __user *name); > +ssize_t file_listxattr(struct file *f, char __user *list, size_t size); > +int file_removexattr(struct file *f, struct xattr_name *kname); > > int may_write_xattr(struct mnt_idmap *idmap, struct inode *inode); > > diff --git a/fs/xattr.c b/fs/xattr.c > index d58979115200..31b8a5eeec1e 100644 > --- a/fs/xattr.c > +++ b/fs/xattr.c > @@ -953,7 +953,6 @@ listxattr(struct dentry *d, char __user *list, size_t size) > return error; > } > > -static > ssize_t file_listxattr(struct file *f, char __user *list, size_t size) > { > audit_file(f); > @@ -1036,7 +1035,7 @@ removexattr(struct mnt_idmap *idmap, struct dentry *d, const char *name) > return vfs_removexattr(idmap, d, name); > } > > -static int file_removexattr(struct file *f, struct xattr_name *kname) > +int file_removexattr(struct file *f, struct xattr_name *kname) > { > int error = mnt_want_write_file(f); > > -- > 2.47.3 > -- Jan Kara <jack@suse.com> SUSE Labs, CR ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 2/2] io_uring: add fremovexattr and flistxattr support 2026-07-21 10:35 [PATCH v3 0/2] io_uring: add fremovexattr and flistxattr support Aditya Prakash Srivastava 2026-07-21 10:35 ` [PATCH v3 1/2] fs: make file_listxattr and file_removexattr helpers non-static Aditya Prakash Srivastava @ 2026-07-21 10:35 ` Aditya Prakash Srivastava 2026-08-13 16:22 ` Aditya Prakash Srivastava 2026-08-14 16:39 ` Gabriel Krisman Bertazi 1 sibling, 2 replies; 6+ messages in thread From: Aditya Prakash Srivastava @ 2026-07-21 10:35 UTC (permalink / raw) To: Jens Axboe, Christian Brauner, Alexander Viro Cc: Jan Kara, io-uring, linux-fsdevel, linux-kernel, Aditya Prakash Srivastava Add support for IORING_OP_FREMOVEXATTR and IORING_OP_FLISTXATTR. This enables xattr listing and removal operations to be executed in an asynchronous fashion. Signed-off-by: Aditya Prakash Srivastava <aditya.ansh182@gmail.com> --- include/uapi/linux/io_uring.h | 2 + io_uring/opdef.c | 18 +++++++ io_uring/xattr.c | 74 +++++++++++++++++++++++++++++ io_uring/xattr.h | 6 +++ tools/include/uapi/linux/io_uring.h | 13 +++++ 5 files changed, 113 insertions(+) diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index 909fb7aea638..805f1e31f492 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -318,6 +318,8 @@ enum io_uring_op { IORING_OP_PIPE, IORING_OP_NOP128, IORING_OP_URING_CMD128, + IORING_OP_FREMOVEXATTR, + IORING_OP_FLISTXATTR, /* this goes last, obviously */ IORING_OP_LAST, diff --git a/io_uring/opdef.c b/io_uring/opdef.c index 4e58eb1344ea..25d9229d8fc0 100644 --- a/io_uring/opdef.c +++ b/io_uring/opdef.c @@ -591,6 +591,16 @@ const struct io_issue_def io_issue_defs[] = { .prep = io_uring_cmd_prep, .issue = io_uring_cmd, }, + [IORING_OP_FREMOVEXATTR] = { + .needs_file = 1, + .prep = io_fremovexattr_prep, + .issue = io_fremovexattr, + }, + [IORING_OP_FLISTXATTR] = { + .needs_file = 1, + .prep = io_flistxattr_prep, + .issue = io_flistxattr, + }, }; const struct io_cold_def io_cold_defs[] = { @@ -849,6 +859,14 @@ const struct io_cold_def io_cold_defs[] = { .sqe_copy = io_uring_cmd_sqe_copy, .cleanup = io_uring_cmd_cleanup, }, + [IORING_OP_FREMOVEXATTR] = { + .name = "FREMOVEXATTR", + .cleanup = io_xattr_cleanup, + }, + [IORING_OP_FLISTXATTR] = { + .name = "FLISTXATTR", + .cleanup = io_xattr_cleanup, + }, }; const char *io_uring_get_opcode(u8 opcode) diff --git a/io_uring/xattr.c b/io_uring/xattr.c index 5303df3f247f..9b410f91ef43 100644 --- a/io_uring/xattr.c +++ b/io_uring/xattr.c @@ -195,3 +195,77 @@ int io_setxattr(struct io_kiocb *req, unsigned int issue_flags) io_xattr_finish(req, ret); return IOU_COMPLETE; } + +int io_fremovexattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) +{ + struct io_xattr *ix = io_kiocb_to_cmd(req, struct io_xattr); + const char __user *name; + int ret; + + INIT_DELAYED_FILENAME(&ix->filename); + name = u64_to_user_ptr(READ_ONCE(sqe->addr)); + + if (READ_ONCE(sqe->addr2) || READ_ONCE(sqe->len) || READ_ONCE(sqe->xattr_flags)) + return -EINVAL; + + ix->ctx.kname = kmalloc_obj(*ix->ctx.kname); + if (!ix->ctx.kname) + return -ENOMEM; + + ret = import_xattr_name(ix->ctx.kname, name); + if (ret) { + kfree(ix->ctx.kname); + return ret; + } + + req->flags |= REQ_F_NEED_CLEANUP; + req->flags |= REQ_F_FORCE_ASYNC; + return 0; +} + +int io_fremovexattr(struct io_kiocb *req, unsigned int issue_flags) +{ + struct io_xattr *ix = io_kiocb_to_cmd(req, struct io_xattr); + int ret; + + WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); + + ret = file_removexattr(req->file, ix->ctx.kname); + io_xattr_finish(req, ret); + return IOU_COMPLETE; +} + +int io_flistxattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) +{ + struct io_xattr *ix = io_kiocb_to_cmd(req, struct io_xattr); + + INIT_DELAYED_FILENAME(&ix->filename); + ix->ctx.kname = NULL; + ix->ctx.kvalue = NULL; + + if (READ_ONCE(sqe->addr)) + return -EINVAL; + + ix->ctx.value = u64_to_user_ptr(READ_ONCE(sqe->addr2)); + ix->ctx.size = READ_ONCE(sqe->len); + ix->ctx.flags = READ_ONCE(sqe->xattr_flags); + + if (ix->ctx.flags) + return -EINVAL; + + req->flags |= REQ_F_NEED_CLEANUP; + req->flags |= REQ_F_FORCE_ASYNC; + return 0; +} + +int io_flistxattr(struct io_kiocb *req, unsigned int issue_flags) +{ + struct io_xattr *ix = io_kiocb_to_cmd(req, struct io_xattr); + int ret; + + WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); + + ret = file_listxattr(req->file, ix->ctx.value, ix->ctx.size); + io_xattr_finish(req, ret); + return IOU_COMPLETE; +} diff --git a/io_uring/xattr.h b/io_uring/xattr.h index 9b459d2ae90c..d2487b49a5d2 100644 --- a/io_uring/xattr.h +++ b/io_uring/xattr.h @@ -13,3 +13,9 @@ int io_fgetxattr(struct io_kiocb *req, unsigned int issue_flags); int io_getxattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); int io_getxattr(struct io_kiocb *req, unsigned int issue_flags); + +int io_fremovexattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); +int io_fremovexattr(struct io_kiocb *req, unsigned int issue_flags); + +int io_flistxattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); +int io_flistxattr(struct io_kiocb *req, unsigned int issue_flags); diff --git a/tools/include/uapi/linux/io_uring.h b/tools/include/uapi/linux/io_uring.h index f1c16f817742..79bf7c22009d 100644 --- a/tools/include/uapi/linux/io_uring.h +++ b/tools/include/uapi/linux/io_uring.h @@ -253,6 +253,19 @@ enum io_uring_op { IORING_OP_FUTEX_WAIT, IORING_OP_FUTEX_WAKE, IORING_OP_FUTEX_WAITV, + IORING_OP_FIXED_FD_INSTALL, + IORING_OP_FTRUNCATE, + IORING_OP_BIND, + IORING_OP_LISTEN, + IORING_OP_RECV_ZC, + IORING_OP_EPOLL_WAIT, + IORING_OP_READV_FIXED, + IORING_OP_WRITEV_FIXED, + IORING_OP_PIPE, + IORING_OP_NOP128, + IORING_OP_URING_CMD128, + IORING_OP_FREMOVEXATTR, + IORING_OP_FLISTXATTR, /* this goes last, obviously */ IORING_OP_LAST, -- 2.47.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 2/2] io_uring: add fremovexattr and flistxattr support 2026-07-21 10:35 ` [PATCH v3 2/2] io_uring: add fremovexattr and flistxattr support Aditya Prakash Srivastava @ 2026-08-13 16:22 ` Aditya Prakash Srivastava 2026-08-14 16:39 ` Gabriel Krisman Bertazi 1 sibling, 0 replies; 6+ messages in thread From: Aditya Prakash Srivastava @ 2026-08-13 16:22 UTC (permalink / raw) To: Jens Axboe, Christian Brauner, Alexander Viro Cc: Jan Kara, io-uring, linux-fsdevel, linux-kernel On Tue, Jul 21, 2026 at 4:06 PM Aditya Prakash Srivastava <aditya.ansh182@gmail.com> wrote: > > Add support for IORING_OP_FREMOVEXATTR and IORING_OP_FLISTXATTR. This > enables xattr listing and removal operations to be executed in an > asynchronous fashion. > Hi, Checking if there is any feedback/concern that needs to be addressed with this patch? Regards, Aditya ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 2/2] io_uring: add fremovexattr and flistxattr support 2026-07-21 10:35 ` [PATCH v3 2/2] io_uring: add fremovexattr and flistxattr support Aditya Prakash Srivastava 2026-08-13 16:22 ` Aditya Prakash Srivastava @ 2026-08-14 16:39 ` Gabriel Krisman Bertazi 1 sibling, 0 replies; 6+ messages in thread From: Gabriel Krisman Bertazi @ 2026-08-14 16:39 UTC (permalink / raw) To: Aditya Prakash Srivastava, Jens Axboe, Christian Brauner, Alexander Viro Cc: Jan Kara, io-uring, linux-fsdevel, linux-kernel, Aditya Prakash Srivastava Aditya Prakash Srivastava <aditya.ansh182@gmail.com> writes: > Add support for IORING_OP_FREMOVEXATTR and IORING_OP_FLISTXATTR. This > enables xattr listing and removal operations to be executed in an > asynchronous fashion. > > Signed-off-by: Aditya Prakash Srivastava <aditya.ansh182@gmail.com> Jens has made a point about avoiding new commands just punting to the wq at [1].[1] https://github.com/axboe/liburing/issues/1492#issuecomment-4683773809 In this case, we have an immediate issue for inline submission with acquiring the mount and the inode lock and there is no callbacks so we are not really in good shape to work around it. Beyond that... > --- > include/uapi/linux/io_uring.h | 2 + > io_uring/opdef.c | 18 +++++++ > io_uring/xattr.c | 74 +++++++++++++++++++++++++++++ > io_uring/xattr.h | 6 +++ > tools/include/uapi/linux/io_uring.h | 13 +++++ > 5 files changed, 113 insertions(+) > > diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h > index 909fb7aea638..805f1e31f492 100644 > --- a/include/uapi/linux/io_uring.h > +++ b/include/uapi/linux/io_uring.h > @@ -318,6 +318,8 @@ enum io_uring_op { > IORING_OP_PIPE, > IORING_OP_NOP128, > IORING_OP_URING_CMD128, > + IORING_OP_FREMOVEXATTR, > + IORING_OP_FLISTXATTR, > > /* this goes last, obviously */ > IORING_OP_LAST, > diff --git a/io_uring/opdef.c b/io_uring/opdef.c > index 4e58eb1344ea..25d9229d8fc0 100644 > --- a/io_uring/opdef.c > +++ b/io_uring/opdef.c > @@ -591,6 +591,16 @@ const struct io_issue_def io_issue_defs[] = { > .prep = io_uring_cmd_prep, > .issue = io_uring_cmd, > }, > + [IORING_OP_FREMOVEXATTR] = { > + .needs_file = 1, > + .prep = io_fremovexattr_prep, > + .issue = io_fremovexattr, > + }, > + [IORING_OP_FLISTXATTR] = { > + .needs_file = 1, > + .prep = io_flistxattr_prep, > + .issue = io_flistxattr, > + }, > }; > > const struct io_cold_def io_cold_defs[] = { > @@ -849,6 +859,14 @@ const struct io_cold_def io_cold_defs[] = { > .sqe_copy = io_uring_cmd_sqe_copy, > .cleanup = io_uring_cmd_cleanup, > }, > + [IORING_OP_FREMOVEXATTR] = { > + .name = "FREMOVEXATTR", > + .cleanup = io_xattr_cleanup, > + }, > + [IORING_OP_FLISTXATTR] = { > + .name = "FLISTXATTR", > + .cleanup = io_xattr_cleanup, > + }, > }; > > const char *io_uring_get_opcode(u8 opcode) > diff --git a/io_uring/xattr.c b/io_uring/xattr.c > index 5303df3f247f..9b410f91ef43 100644 > --- a/io_uring/xattr.c > +++ b/io_uring/xattr.c > @@ -195,3 +195,77 @@ int io_setxattr(struct io_kiocb *req, unsigned int issue_flags) > io_xattr_finish(req, ret); > return IOU_COMPLETE; > } > + > +int io_fremovexattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) > +{ > + struct io_xattr *ix = io_kiocb_to_cmd(req, struct io_xattr); > + const char __user *name; > + int ret; > + > + INIT_DELAYED_FILENAME(&ix->filename); > + name = u64_to_user_ptr(READ_ONCE(sqe->addr)); > + > + if (READ_ONCE(sqe->addr2) || READ_ONCE(sqe->len) || READ_ONCE(sqe->xattr_flags)) > + return -EINVAL; There are more fields to be rejected here, check the latest patches from Yi Xie such as cc609376e9a4 ("io_uring/fs: check unused sqe fields for unlinkat"). > + > + ix->ctx.kname = kmalloc_obj(*ix->ctx.kname); > + if (!ix->ctx.kname) > + return -ENOMEM; > + > + ret = import_xattr_name(ix->ctx.kname, name); > + if (ret) { > + kfree(ix->ctx.kname); > + return ret; > + } > + > + req->flags |= REQ_F_NEED_CLEANUP; > + req->flags |= REQ_F_FORCE_ASYNC; This will cause the cleanup to call io_xattr_cleanup, which does kfree on ix->ctx.kvalue, which is never initialized. If it has garbage from a previous command in the kiocb cmd space, you can craft a corruption or, more likely, a crash. > + return 0; > +} > + > +int io_fremovexattr(struct io_kiocb *req, unsigned int issue_flags) > +{ > + struct io_xattr *ix = io_kiocb_to_cmd(req, struct io_xattr); > + int ret; > + > + WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); > + > + ret = file_removexattr(req->file, ix->ctx.kname); > + io_xattr_finish(req, ret); > + return IOU_COMPLETE; > +} > + > +int io_flistxattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) > +{ > + struct io_xattr *ix = io_kiocb_to_cmd(req, struct io_xattr); > + > + INIT_DELAYED_FILENAME(&ix->filename); > + ix->ctx.kname = NULL; > + ix->ctx.kvalue = NULL; > + > + if (READ_ONCE(sqe->addr)) > + return -EINVAL; > + > + ix->ctx.value = u64_to_user_ptr(READ_ONCE(sqe->addr2)); > + ix->ctx.size = READ_ONCE(sqe->len); > + ix->ctx.flags = READ_ONCE(sqe->xattr_flags); > + > + if (ix->ctx.flags) > + return -EINVAL; > + > + req->flags |= REQ_F_NEED_CLEANUP; > + req->flags |= REQ_F_FORCE_ASYNC; > + return 0; > +} > + > +int io_flistxattr(struct io_kiocb *req, unsigned int issue_flags) > +{ > + struct io_xattr *ix = io_kiocb_to_cmd(req, struct io_xattr); > + int ret; > + > + WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK); > + > + ret = file_listxattr(req->file, ix->ctx.value, ix->ctx.size); > + io_xattr_finish(req, ret); > + return IOU_COMPLETE; > +} > diff --git a/io_uring/xattr.h b/io_uring/xattr.h > index 9b459d2ae90c..d2487b49a5d2 100644 > --- a/io_uring/xattr.h > +++ b/io_uring/xattr.h > @@ -13,3 +13,9 @@ int io_fgetxattr(struct io_kiocb *req, unsigned int issue_flags); > > int io_getxattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); > int io_getxattr(struct io_kiocb *req, unsigned int issue_flags); > + > +int io_fremovexattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); > +int io_fremovexattr(struct io_kiocb *req, unsigned int issue_flags); > + > +int io_flistxattr_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); > +int io_flistxattr(struct io_kiocb *req, unsigned int issue_flags); > diff --git a/tools/include/uapi/linux/io_uring.h b/tools/include/uapi/linux/io_uring.h > index f1c16f817742..79bf7c22009d 100644 > --- a/tools/include/uapi/linux/io_uring.h > +++ b/tools/include/uapi/linux/io_uring.h > @@ -253,6 +253,19 @@ enum io_uring_op { > IORING_OP_FUTEX_WAIT, > IORING_OP_FUTEX_WAKE, > IORING_OP_FUTEX_WAITV, > + IORING_OP_FIXED_FD_INSTALL, > + IORING_OP_FTRUNCATE, > + IORING_OP_BIND, > + IORING_OP_LISTEN, > + IORING_OP_RECV_ZC, > + IORING_OP_EPOLL_WAIT, > + IORING_OP_READV_FIXED, > + IORING_OP_WRITEV_FIXED, > + IORING_OP_PIPE, > + IORING_OP_NOP128, > + IORING_OP_URING_CMD128, > + IORING_OP_FREMOVEXATTR, > + IORING_OP_FLISTXATTR, I'd rather these (minus the xattr ones) go in a separate fix patch ahead of the series... -- Gabriel Krisman Bertazi ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-08-14 16:41 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-07-21 10:35 [PATCH v3 0/2] io_uring: add fremovexattr and flistxattr support Aditya Prakash Srivastava 2026-07-21 10:35 ` [PATCH v3 1/2] fs: make file_listxattr and file_removexattr helpers non-static Aditya Prakash Srivastava 2026-07-27 14:46 ` Jan Kara 2026-07-21 10:35 ` [PATCH v3 2/2] io_uring: add fremovexattr and flistxattr support Aditya Prakash Srivastava 2026-08-13 16:22 ` Aditya Prakash Srivastava 2026-08-14 16:39 ` Gabriel Krisman Bertazi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox