diff options
author | Jens Axboe <axboe@kernel.dk> | 2020-01-14 22:06:11 -0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2020-01-14 22:06:11 -0700 |
commit | e0bbb3461ae000baec13e8ec5b5063202df228df (patch) | |
tree | 0b3f8f9a36b0bbe0fe4b286485e5f43af6fadc8f /fs/io-wq.c | |
parent | 74566df3a71c1b92da608868cca787557d8be7b2 (diff) | |
download | lwn-e0bbb3461ae000baec13e8ec5b5063202df228df.tar.gz lwn-e0bbb3461ae000baec13e8ec5b5063202df228df.zip |
io-wq: cancel work if we fail getting a mm reference
If we require mm and user context, mark the request for cancellation
if we fail to acquire the desired mm.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/io-wq.c')
-rw-r--r-- | fs/io-wq.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/io-wq.c b/fs/io-wq.c index 541c8a3e0bbb..5147d2213b01 100644 --- a/fs/io-wq.c +++ b/fs/io-wq.c @@ -445,10 +445,14 @@ next: task_unlock(current); } if ((work->flags & IO_WQ_WORK_NEEDS_USER) && !worker->mm && - wq->mm && mmget_not_zero(wq->mm)) { - use_mm(wq->mm); - set_fs(USER_DS); - worker->mm = wq->mm; + wq->mm) { + if (mmget_not_zero(wq->mm)) { + use_mm(wq->mm); + set_fs(USER_DS); + worker->mm = wq->mm; + } else { + work->flags |= IO_WQ_WORK_CANCEL; + } } if (!worker->creds) worker->creds = override_creds(wq->creds); |