From: Jens Axboe Date: Sat, 13 Feb 2021 16:00:02 +0000 (-0700) Subject: io_uring: allow task match to be passed to io_req_cache_free() X-Git-Tag: accepted/tizen/unified/20230118.172025~7716^2~29 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=68e68ee6e359318c40891f614612616d219066d0;p=platform%2Fkernel%2Flinux-rpi.git io_uring: allow task match to be passed to io_req_cache_free() No changes in this patch, just allows a caller to pass in a targeted task that we must match for freeing requests in the cache. Signed-off-by: Jens Axboe --- diff --git a/fs/io_uring.c b/fs/io_uring.c index 2e8cb73..9cd7b03 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -8681,12 +8681,13 @@ static void io_destroy_buffers(struct io_ring_ctx *ctx) idr_destroy(&ctx->io_buffer_idr); } -static void io_req_cache_free(struct list_head *list) +static void io_req_cache_free(struct list_head *list, struct task_struct *tsk) { - while (!list_empty(list)) { - struct io_kiocb *req; + struct io_kiocb *req, *nxt; - req = list_first_entry(list, struct io_kiocb, compl.list); + list_for_each_entry_safe(req, nxt, list, compl.list) { + if (tsk && req->task != tsk) + continue; list_del(&req->compl.list); kmem_cache_free(req_cachep, req); } @@ -8742,8 +8743,8 @@ static void io_ring_ctx_free(struct io_ring_ctx *ctx) free_uid(ctx->user); put_cred(ctx->creds); kfree(ctx->cancel_hash); - io_req_cache_free(&ctx->submit_state.comp.free_list); - io_req_cache_free(&ctx->submit_state.comp.locked_free_list); + io_req_cache_free(&ctx->submit_state.comp.free_list, NULL); + io_req_cache_free(&ctx->submit_state.comp.locked_free_list, NULL); kfree(ctx); }