Commit 30975825 authored by Bijan Mottahedeh's avatar Bijan Mottahedeh Committed by Jens Axboe

io_uring: report pinned memory usage

Report pinned memory usage always, regardless of whether locked memory
limit is enforced.
Signed-off-by: default avatarBijan Mottahedeh <bijan.mottahedeh@oracle.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent aad5d8da
...@@ -6997,12 +6997,23 @@ static void io_unaccount_mem(struct io_ring_ctx *ctx, unsigned long nr_pages) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment