Skip to content

Commit

Permalink
io-wq: make the io_wq ref counted
Browse files Browse the repository at this point in the history
In preparation for sharing an io-wq across different users, add a
reference count that manages destruction of it.

Reviewed-by: Pavel Begunkov <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
axboe committed Jan 27, 2020
1 parent 9466f43 commit 848f7e1
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion fs/io-wq.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ struct io_wq {
struct mm_struct *mm;
refcount_t refs;
struct completion done;

refcount_t use_refs;
};

static bool io_worker_get(struct io_worker *worker)
Expand Down Expand Up @@ -1073,6 +1075,7 @@ struct io_wq *io_wq_create(unsigned bounded, struct io_wq_data *data)
ret = -ENOMEM;
goto err;
}
refcount_set(&wq->use_refs, 1);
reinit_completion(&wq->done);
return wq;
}
Expand All @@ -1093,7 +1096,7 @@ static bool io_wq_worker_wake(struct io_worker *worker, void *data)
return false;
}

void io_wq_destroy(struct io_wq *wq)
static void __io_wq_destroy(struct io_wq *wq)
{
int node;

Expand All @@ -1113,3 +1116,9 @@ void io_wq_destroy(struct io_wq *wq)
kfree(wq->wqes);
kfree(wq);
}

void io_wq_destroy(struct io_wq *wq)
{
if (refcount_dec_and_test(&wq->use_refs))
__io_wq_destroy(wq);
}

0 comments on commit 848f7e1

Please sign in to comment.