From: Pavel Begunkov Date: Sun, 11 Apr 2021 00:46:35 +0000 (+0100) Subject: io_uring: add buffer unmap helper X-Git-Tag: v5.15~1256^2~54 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7f61a1e9ef511660d66ea926b5899559fe94b1d0;p=platform%2Fkernel%2Flinux-starfive.git io_uring: add buffer unmap helper Add a helper for unmapping registered buffers, better than double indexing and will be reused in the future. Suggested-by: Bijan Mottahedeh Signed-off-by: Pavel Begunkov Link: https://lore.kernel.org/r/66cbc6ea863be865bac7b7080ed6a3d5c542b71f.1618101759.git.asml.silence@gmail.com Signed-off-by: Jens Axboe --- diff --git a/fs/io_uring.c b/fs/io_uring.c index 1eb8156..e9a2f8f 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -8093,25 +8093,27 @@ static unsigned long rings_size(unsigned sq_entries, unsigned cq_entries, return off; } +static void io_buffer_unmap(struct io_ring_ctx *ctx, struct io_mapped_ubuf *imu) +{ + unsigned int i; + + for (i = 0; i < imu->nr_bvecs; i++) + unpin_user_page(imu->bvec[i].bv_page); + if (imu->acct_pages) + io_unaccount_mem(ctx, imu->acct_pages); + kvfree(imu->bvec); + imu->nr_bvecs = 0; +} + static int io_sqe_buffers_unregister(struct io_ring_ctx *ctx) { - int i, j; + unsigned int i; if (!ctx->user_bufs) return -ENXIO; - for (i = 0; i < ctx->nr_user_bufs; i++) { - struct io_mapped_ubuf *imu = &ctx->user_bufs[i]; - - for (j = 0; j < imu->nr_bvecs; j++) - unpin_user_page(imu->bvec[j].bv_page); - - if (imu->acct_pages) - io_unaccount_mem(ctx, imu->acct_pages); - kvfree(imu->bvec); - imu->nr_bvecs = 0; - } - + for (i = 0; i < ctx->nr_user_bufs; i++) + io_buffer_unmap(ctx, &ctx->user_bufs[i]); kfree(ctx->user_bufs); ctx->user_bufs = NULL; ctx->nr_user_bufs = 0;