mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 23:24:11 +08:00
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 <bijan.mottahedeh@oracle.com> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/66cbc6ea863be865bac7b7080ed6a3d5c542b71f.1618101759.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
3e9424989b
commit
7f61a1e9ef
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user