Skip to content

Commit

Permalink
io_uring/iopoll: unify tw breaking logic
Browse files Browse the repository at this point in the history
Let's keep checks for whether to break the iopoll loop or not same for
normal and defer tw, this includes ->cached_cq_tail checks guarding
against polling more than asked for.

Signed-off-by: Pavel Begunkov <[email protected]>
Link: https://lore.kernel.org/r/d2fa8a44f8114f55a4807528da438cde93815360.1662652536.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
isilence authored and axboe committed Sep 21, 2022
1 parent 9d54bd6 commit 1f8d5bb
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions io_uring/io_uring.c
Original file line number Diff line number Diff line change
Expand Up @@ -1428,21 +1428,21 @@ static int io_iopoll_check(struct io_ring_ctx *ctx, long min)
*/
if (wq_list_empty(&ctx->iopoll_list) ||
io_task_work_pending(ctx)) {
u32 tail = ctx->cached_cq_tail;

if (!llist_empty(&ctx->work_llist))
__io_run_local_work(ctx, true);

if (task_work_pending(current) ||
wq_list_empty(&ctx->iopoll_list)) {
u32 tail = ctx->cached_cq_tail;

mutex_unlock(&ctx->uring_lock);
io_run_task_work();
mutex_lock(&ctx->uring_lock);

/* some requests don't go through iopoll_list */
if (tail != ctx->cached_cq_tail ||
wq_list_empty(&ctx->iopoll_list))
break;
}
/* some requests don't go through iopoll_list */
if (tail != ctx->cached_cq_tail ||
wq_list_empty(&ctx->iopoll_list))
break;
}
ret = io_do_iopoll(ctx, !min);
if (ret < 0)
Expand Down

0 comments on commit 1f8d5bb

Please sign in to comment.