Prepare for supporting sqe group, which requires to post group leader's CQE after all members' CQEs are posted. For group leader request, we can't do that in io_req_complete_post, and REQ_F_CQE_SKIP can't be set in io_free_req(). So move marking REQ_F_CQE_SKIP out of io_free_req(). No functional change. Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> --- io_uring/io_uring.c | 5 +++-- io_uring/timeout.c | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index e4be930e0f1e..c184c9a312df 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -1027,8 +1027,6 @@ __cold void io_free_req(struct io_kiocb *req) { /* refs were already put, restore them for io_req_task_complete() */ req->flags &= ~REQ_F_REFCOUNT; - /* we only want to free it, don't post CQEs */ - req->flags |= REQ_F_CQE_SKIP; req->io_task_work.func = io_req_task_complete; io_req_task_work_add(req); } @@ -1797,6 +1795,9 @@ struct io_wq_work *io_wq_free_work(struct io_wq_work *work) if (req_ref_put_and_test(req)) { if (req->flags & IO_REQ_LINK_FLAGS) nxt = io_req_find_next(req); + + /* we have posted CQEs in io_req_complete_post() */ + req->flags |= REQ_F_CQE_SKIP; io_free_req(req); } return nxt ? &nxt->work : NULL; diff --git a/io_uring/timeout.c b/io_uring/timeout.c index 1c9bf07499b1..202f540aa314 100644 --- a/io_uring/timeout.c +++ b/io_uring/timeout.c @@ -47,6 +47,9 @@ static inline void io_put_req(struct io_kiocb *req) { if (req_ref_put_and_test(req)) { io_queue_next(req); + + /* we only want to free it, don't post CQEs */ + req->flags |= REQ_F_CQE_SKIP; io_free_req(req); } } -- 2.42.0