public inbox for [email protected]
 help / color / mirror / Atom feed
From: Pavel Begunkov <[email protected]>
To: [email protected]
Cc: [email protected], Jens Axboe <[email protected]>,
	[email protected], Kanchan Joshi <[email protected]>,
	Ming Lei <[email protected]>
Subject: [PATCH v3 04/13] io_uring/cmd: introduce io_uring_cmd_complete
Date: Mon, 18 Mar 2024 22:00:26 +0000	[thread overview]
Message-ID: <82ff8a45f2c3eb5f3a04a33f0692e5e4a1320455.1710799188.git.asml.silence@gmail.com> (raw)
In-Reply-To: <[email protected]>

io_uring_cmd_complete() does exactly what io_uring_cmd_done() does, that
is completing the request, but doesn't ask for issue_flags argument. We
have a couple of users hardcoding some random issue_flags values in
drivers, which they absolutely should not do. This function will be used
to get rid of them. Also, add comments warning users that they're only
allowed to pass issue_flags that were given from io_uring.

Signed-off-by: Pavel Begunkov <[email protected]>
---
 include/linux/io_uring/cmd.h | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/include/linux/io_uring/cmd.h b/include/linux/io_uring/cmd.h
index e453a997c060..bf94ed4135d8 100644
--- a/include/linux/io_uring/cmd.h
+++ b/include/linux/io_uring/cmd.h
@@ -26,12 +26,25 @@ static inline const void *io_uring_sqe_cmd(const struct io_uring_sqe *sqe)
 #if defined(CONFIG_IO_URING)
 int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
 			      struct iov_iter *iter, void *ioucmd);
+
+/*
+ * Completes the request, i.e. posts an io_uring CQE and deallocates @ioucmd
+ * and the corresponding io_uring request.
+ *
+ * Note: the caller should never hard code @issue_flags and is only allowed
+ * to pass the mask provided by the core io_uring code.
+ */
 void io_uring_cmd_done(struct io_uring_cmd *cmd, ssize_t ret, ssize_t res2,
 			unsigned issue_flags);
+
 void __io_uring_cmd_do_in_task(struct io_uring_cmd *ioucmd,
 			    void (*task_work_cb)(struct io_uring_cmd *, unsigned),
 			    unsigned flags);
 
+/*
+ * Note: the caller should never hard code @issue_flags and only use the
+ * mask provided by the core io_uring code.
+ */
 void io_uring_cmd_mark_cancelable(struct io_uring_cmd *cmd,
 		unsigned int issue_flags);
 
@@ -56,6 +69,21 @@ static inline void io_uring_cmd_mark_cancelable(struct io_uring_cmd *cmd,
 }
 #endif
 
+/*
+ * Completes the request, i.e. posts an io_uring CQE and deallocates @ioucmd
+ * and the corresponding io_uring request. Similar to io_uring_cmd_done() but
+ * doesn't need issue_flags.
+ *
+ * Note, must not be used with cancellable requests.
+ */
+static inline void io_uring_cmd_complete(struct io_uring_cmd *ioucmd,
+					 ssize_t ret, ssize_t res2)
+{
+	if (WARN_ON_ONCE(ioucmd->flags & IORING_URING_CMD_CANCELABLE))
+		return;
+	io_uring_cmd_done(ioucmd, ret, res2, IO_URING_F_UNLOCKED);
+}
+
 /* users must follow the IOU_F_TWQ_LAZY_WAKE semantics */
 static inline void io_uring_cmd_do_in_task_lazy(struct io_uring_cmd *ioucmd,
 			void (*task_work_cb)(struct io_uring_cmd *, unsigned))
-- 
2.44.0


  parent reply	other threads:[~2024-03-18 22:02 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-18 22:00 [PATCH v3 00/13] Remove aux CQE caches Pavel Begunkov
2024-03-18 22:00 ` [PATCH v3 01/13] io_uring/cmd: move io_uring_try_cancel_uring_cmd() Pavel Begunkov
2024-03-19  1:29   ` Ming Lei
2024-03-18 22:00 ` [PATCH v3 02/13] io_uring/cmd: kill one issue_flags to tw conversion Pavel Begunkov
2024-03-19  1:33   ` Ming Lei
2024-03-18 22:00 ` [PATCH v3 03/13] io_uring/cmd: fix tw <-> issue_flags conversion Pavel Begunkov
2024-03-19  1:37   ` Ming Lei
2024-03-18 22:00 ` Pavel Begunkov [this message]
2024-03-19  1:39   ` [PATCH v3 04/13] io_uring/cmd: introduce io_uring_cmd_complete Ming Lei
2024-03-18 22:00 ` [PATCH v3 05/13] nvme/io_uring: don't hard code IO_URING_F_UNLOCKED Pavel Begunkov
2024-03-19  1:40   ` Ming Lei
2024-03-18 22:00 ` [PATCH v3 06/13] io_uring/rw: avoid punting to io-wq directly Pavel Begunkov
2024-03-18 22:00 ` [PATCH v3 07/13] io_uring: force tw ctx locking Pavel Begunkov
2024-03-18 22:00 ` [PATCH v3 08/13] io_uring: remove struct io_tw_state::locked Pavel Begunkov
2024-03-18 22:00 ` [PATCH v3 09/13] io_uring: refactor io_fill_cqe_req_aux Pavel Begunkov
2024-03-18 22:00 ` [PATCH v3 10/13] io_uring: get rid of intermediate aux cqe caches Pavel Begunkov
2024-03-18 22:00 ` [PATCH v3 11/13] io_uring: remove current check from complete_post Pavel Begunkov
2024-03-18 22:00 ` [PATCH v3 12/13] io_uring: refactor io_req_complete_post() Pavel Begunkov
2024-03-18 22:00 ` [PATCH v3 13/13] io_uring: clean up io_lockdep_assert_cq_locked Pavel Begunkov
2024-03-19  1:42 ` [PATCH v3 00/13] Remove aux CQE caches Ming Lei
2024-03-19  2:19 ` Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=82ff8a45f2c3eb5f3a04a33f0692e5e4a1320455.1710799188.git.asml.silence@gmail.com \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox