mirror of https://gitee.com/openkylin/linux.git
io_uring: report pinned memory usage
Report pinned memory usage always, regardless of whether locked memory limit is enforced. Signed-off-by: Bijan Mottahedeh <bijan.mottahedeh@oracle.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
aad5d8da1b
commit
309758254e
|
@ -6997,12 +6997,23 @@ static void io_unaccount_mem(struct io_ring_ctx *ctx, unsigned long nr_pages)
|
||||||
{
|
{
|
||||||
if (ctx->limit_mem)
|
if (ctx->limit_mem)
|
||||||
__io_unaccount_mem(ctx->user, nr_pages);
|
__io_unaccount_mem(ctx->user, nr_pages);
|
||||||
|
|
||||||
|
if (ctx->sqo_mm)
|
||||||
|
atomic64_sub(nr_pages, &ctx->sqo_mm->pinned_vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int io_account_mem(struct io_ring_ctx *ctx, unsigned long nr_pages)
|
static int io_account_mem(struct io_ring_ctx *ctx, unsigned long nr_pages)
|
||||||
{
|
{
|
||||||
if (ctx->limit_mem)
|
int ret;
|
||||||
return __io_account_mem(ctx->user, nr_pages);
|
|
||||||
|
if (ctx->limit_mem) {
|
||||||
|
ret = __io_account_mem(ctx->user, nr_pages);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->sqo_mm)
|
||||||
|
atomic64_add(nr_pages, &ctx->sqo_mm->pinned_vm);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -7304,8 +7315,10 @@ static void io_destroy_buffers(struct io_ring_ctx *ctx)
|
||||||
static void io_ring_ctx_free(struct io_ring_ctx *ctx)
|
static void io_ring_ctx_free(struct io_ring_ctx *ctx)
|
||||||
{
|
{
|
||||||
io_finish_async(ctx);
|
io_finish_async(ctx);
|
||||||
if (ctx->sqo_mm)
|
if (ctx->sqo_mm) {
|
||||||
mmdrop(ctx->sqo_mm);
|
mmdrop(ctx->sqo_mm);
|
||||||
|
ctx->sqo_mm = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
io_iopoll_reap_events(ctx);
|
io_iopoll_reap_events(ctx);
|
||||||
io_sqe_buffer_unregister(ctx);
|
io_sqe_buffer_unregister(ctx);
|
||||||
|
@ -7912,7 +7925,6 @@ static int io_uring_create(unsigned entries, struct io_uring_params *p,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
ctx->compat = in_compat_syscall();
|
ctx->compat = in_compat_syscall();
|
||||||
ctx->limit_mem = limit_mem;
|
|
||||||
ctx->user = user;
|
ctx->user = user;
|
||||||
ctx->creds = get_current_cred();
|
ctx->creds = get_current_cred();
|
||||||
|
|
||||||
|
@ -7960,6 +7972,8 @@ static int io_uring_create(unsigned entries, struct io_uring_params *p,
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
trace_io_uring_create(ret, ctx, p->sq_entries, p->cq_entries, p->flags);
|
trace_io_uring_create(ret, ctx, p->sq_entries, p->cq_entries, p->flags);
|
||||||
|
io_account_mem(ctx, ring_pages(p->sq_entries, p->cq_entries));
|
||||||
|
ctx->limit_mem = limit_mem;
|
||||||
return ret;
|
return ret;
|
||||||
err:
|
err:
|
||||||
io_ring_ctx_wait_and_kill(ctx);
|
io_ring_ctx_wait_and_kill(ctx);
|
||||||
|
|
Loading…
Reference in New Issue