diff options
author | Pavel Begunkov <asml.silence@gmail.com> | 2020-01-28 03:15:47 +0300 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2020-01-29 03:44:40 +0300 |
commit | eba6f5a330cf042bb0001f0b5e8cbf21be1b25d6 (patch) | |
tree | 08c2440a6666fc85c612855b9a21c3614a57dd20 | |
parent | cccf0ee834559ae0b327b40290e14f6a2a017177 (diff) | |
download | linux-eba6f5a330cf042bb0001f0b5e8cbf21be1b25d6.tar.xz |
io-wq: allow grabbing existing io-wq
Export a helper to attach to an existing io-wq, rather than setting up
a new one. This is doable now that we have reference counted io_wq's.
Reported-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | fs/io-wq.c | 8 | ||||
-rw-r--r-- | fs/io-wq.h | 1 |
2 files changed, 9 insertions, 0 deletions
diff --git a/fs/io-wq.c b/fs/io-wq.c index 7ccedc82a703..f7eb577ccd2d 100644 --- a/fs/io-wq.c +++ b/fs/io-wq.c @@ -1114,6 +1114,14 @@ err: return ERR_PTR(ret); } +bool io_wq_get(struct io_wq *wq, struct io_wq_data *data) +{ + 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); |