diff --git a/fs/io-wq.c b/fs/io-wq.c index 5d089acdcfbd8e35885000828e28f18e7be7fb02..87498b1e0674d21dff024bb69ce2c7033cf20f61 100644 --- a/fs/io-wq.c +++ b/fs/io-wq.c @@ -1115,6 +1115,14 @@ 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->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 bbc5290421901e1220483f0d6cc51b969cf94bb3..b4ff96ce74434907766439d1b70d123f2e013907 100644 --- a/fs/io-wq.h +++ b/fs/io-wq.h @@ -98,6 +98,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);