io_uring_mshot_cmd_post_cqe() is declared with a different signature when CONFIG_IO_URING is defined than when it isn't. Match the !CONFIG_IO_URING definition's signature to the CONFIG_IO_URING one. Signed-off-by: Caleb Sander Mateos Fixes: 55dc643dd2ad ("io_uring: uring_cmd: add multishot support") --- include/linux/io_uring/cmd.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/linux/io_uring/cmd.h b/include/linux/io_uring/cmd.h index be0e29b72669..f746f6a77e96 100644 --- a/include/linux/io_uring/cmd.h +++ b/include/linux/io_uring/cmd.h @@ -122,11 +122,12 @@ io_uring_cmd_buffer_select(struct io_uring_cmd *ioucmd, unsigned buf_group, size_t *len, unsigned int issue_flags); { return (struct io_br_sel) { .val = -EOPNOTSUPP }; } static inline bool io_uring_mshot_cmd_post_cqe(struct io_uring_cmd *ioucmd, - ssize_t ret, unsigned int issue_flags) + struct io_br_sel *sel, + unsigned int issue_flags) { return true; } #endif -- 2.45.2 io_uring_cmd_prep() currently has two checks for whether IORING_URING_CMD_FIXED and IORING_URING_CMD_MULTISHOT are both set in uring_cmd_flags. Remove the second check. Signed-off-by: Caleb Sander Mateos --- io_uring/uring_cmd.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/io_uring/uring_cmd.c b/io_uring/uring_cmd.c index 3cfb5d51b88a..c8fd204f6892 100644 --- a/io_uring/uring_cmd.c +++ b/io_uring/uring_cmd.c @@ -200,12 +200,10 @@ int io_uring_cmd_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) return -EINVAL; req->buf_index = READ_ONCE(sqe->buf_index); } if (ioucmd->flags & IORING_URING_CMD_MULTISHOT) { - if (ioucmd->flags & IORING_URING_CMD_FIXED) - return -EINVAL; if (!(req->flags & REQ_F_BUFFER_SELECT)) return -EINVAL; } else { if (req->flags & REQ_F_BUFFER_SELECT) return -EINVAL; -- 2.45.2 io_uring_cmd_prep() checks that REQ_F_BUFFER_SELECT is set in the io_kiocb's flags iff IORING_URING_CMD_MULTISHOT is set in the SQE's uring_cmd_flags. Consolidate the IORING_URING_CMD_MULTISHOT and !IORING_URING_CMD_MULTISHOT branches into a single check that the IORING_URING_CMD_MULTISHOT flag matches the REQ_F_BUFFER_SELECT flag. Signed-off-by: Caleb Sander Mateos --- io_uring/uring_cmd.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/io_uring/uring_cmd.c b/io_uring/uring_cmd.c index c8fd204f6892..482cc5be1f8d 100644 --- a/io_uring/uring_cmd.c +++ b/io_uring/uring_cmd.c @@ -199,17 +199,13 @@ int io_uring_cmd_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) if (ioucmd->flags & IORING_URING_CMD_MULTISHOT) return -EINVAL; req->buf_index = READ_ONCE(sqe->buf_index); } - if (ioucmd->flags & IORING_URING_CMD_MULTISHOT) { - if (!(req->flags & REQ_F_BUFFER_SELECT)) - return -EINVAL; - } else { - if (req->flags & REQ_F_BUFFER_SELECT) - return -EINVAL; - } + if (!!(ioucmd->flags & IORING_URING_CMD_MULTISHOT) != + !!(req->flags & REQ_F_BUFFER_SELECT)) + return -EINVAL; ioucmd->cmd_op = READ_ONCE(sqe->cmd_op); ac = io_uring_alloc_async_data(&req->ctx->cmd_cache, req); if (!ac) -- 2.45.2