diff options
author | Hao Xu <haoxu@linux.alibaba.com> | 2021-09-12 03:40:52 +0800 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2021-09-12 19:27:47 -0600 |
commit | 767a65e9f31789d80e41edd03a802314905e8fbf (patch) | |
tree | efc0d0cf64e9e0b225c0c9435004b951381ea384 /fs/select.c | |
parent | 7a842fb589e3cdbe205bc16dc37c30cf13383159 (diff) |
io-wq: fix potential race of acct->nr_workers
Given max_worker is 1, and we currently have 1 running and it is
exiting. There may be race like:
io_wqe_enqueue worker1
no work there and timeout
unlock(wqe->lock)
->insert work
-->io_worker_exit
lock(wqe->lock)
->if(!nr_workers) //it's still 1
unlock(wqe->lock)
goto run_cancel
lock(wqe->lock)
nr_workers--
->dec_running
->worker creation fails
unlock(wqe->lock)
We enqueued one work but there is no workers, causes hung.
Signed-off-by: Hao Xu <haoxu@linux.alibaba.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/select.c')
0 files changed, 0 insertions, 0 deletions