io_uring: fix imbalanced sqo_mm accounting
authorJens Axboe <axboe@kernel.dk>
Tue, 25 Aug 2020 13:58:00 +0000 (07:58 -0600)
committerJens Axboe <axboe@kernel.dk>
Tue, 25 Aug 2020 18:05:57 +0000 (12:05 -0600)
commit6b7898eb180df12767933466b7855b23103ad489
treed706d26c9eeb38cde5a618f000c6d1210c43151a
parent842163154b87b01d8f516af15ad8916eb1661016
io_uring: fix imbalanced sqo_mm accounting

We do the initial accounting of locked_vm and pinned_vm before we have
setup ctx->sqo_mm, which means we can end up having not accounted the
memory at setup time, but still decrement it when we exit. This causes
an imbalance in the accounting.

Setup ctx->sqo_mm earlier in io_uring_create(), before we do the first
accounting of mm->{locked,pinned}_vm. This also unifies the state
grabbing for the ctx, and eliminates a failure case in
io_sq_offload_start().

Fixes: f74441e6311a ("io_uring: account locked memory before potential error case")
Reported-by: Robert M. Muncrief <rmuncrief@humanavance.com>
Reported-by: Niklas Schnelle <schnelle@linux.ibm.com>
Tested-by: Niklas Schnelle <schnelle@linux.ibm.com>
Tested-by: Robert M. Muncrief <rmuncrief@humanavance.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c