io_uring: account user memory freed when exit has been queued
authorJens Axboe <axboe@kernel.dk>
Fri, 10 Jul 2020 15:13:34 +0000 (09:13 -0600)
committerJens Axboe <axboe@kernel.dk>
Fri, 10 Jul 2020 15:18:35 +0000 (09:18 -0600)
commit309fc03a3284af62eb6082fb60327045a1dabf57
tree86fe76e3d98a2193ce8b440a9d212f6d91c7b7fb
parent667e57da358f61b6966e12e925a69e42d912e8bb
io_uring: account user memory freed when exit has been queued

We currently account the memory after the exit work has been run, but
that leaves a gap where a process has closed its ring and until the
memory has been accounted as freed. If the memlocked ulimit is
borderline, then that can introduce spurious setup errors returning
-ENOMEM because the free work hasn't been run yet.

Account this as freed when we close the ring, as not to expose a tiny
gap where setting up a new ring can fail.

Fixes: 85faa7b8346e ("io_uring: punt final io_ring_ctx wait-and-free to workqueue")
Cc: stable@vger.kernel.org # v5.7
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c