Messages in this thread Patch in this message | | | From | Pavel Begunkov <> | Subject | [PATCH 1/2] io-wq: allow grabbing existing io-wq | Date | Tue, 28 Jan 2020 03:06:51 +0300 |
| |
If the id and user/creds match, return an existing io_wq if we can safely grab a reference to it.
Reported-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> --- fs/io-wq.c | 10 ++++++++++ fs/io-wq.h | 1 + 2 files changed, 11 insertions(+)
diff --git a/fs/io-wq.c b/fs/io-wq.c index b45d585cdcc8..36d05503b982 100644 --- a/fs/io-wq.c +++ b/fs/io-wq.c @@ -1110,6 +1110,16 @@ struct io_wq *io_wq_create(unsigned bounded, struct io_wq_data *data) return ERR_PTR(ret); } +bool io_wq_get(struct io_wq *wq, struct io_wq_data *data) +{ + if (data->creds != wq->creds || data->user != wq->user) + return false; + if (data->get_work != wq->get_work || data->put_work != wq->put_work) + return false; + + return refcount_inc_not_zero(&wq->use_refs); +} + static bool io_wq_worker_wake(struct io_worker *worker, void *data) { wake_up_process(worker->task); diff --git a/fs/io-wq.h b/fs/io-wq.h index 167316ad447e..c42602c58c56 100644 --- a/fs/io-wq.h +++ b/fs/io-wq.h @@ -99,6 +99,7 @@ struct io_wq_data { }; struct io_wq *io_wq_create(unsigned bounded, struct io_wq_data *data); +bool io_wq_get(struct io_wq *wq, struct io_wq_data *data); void io_wq_destroy(struct io_wq *wq); void io_wq_enqueue(struct io_wq *wq, struct io_wq_work *work); -- 2.24.0
| |