diff options
author | Jens Axboe <axboe@kernel.dk> | 2022-01-19 03:13:43 +0100 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2022-01-19 03:27:59 +0100 |
commit | 081b58204629eff9dd93e7f68ed15c8aa6452a4b (patch) | |
tree | 6798f4f3df2f184fc901aad8a95ca5da35f35bd4 /fs/io-wq.c | |
parent | io-wq: remove useless 'work' argument to __io_worker_busy() (diff) | |
download | linux-081b58204629eff9dd93e7f68ed15c8aa6452a4b.tar.xz linux-081b58204629eff9dd93e7f68ed15c8aa6452a4b.zip |
io-wq: make io_worker lock a raw spinlock
In preparation to nesting it under the wqe lock (which is raw due to
being acquired from the scheduler side), change the io_worker lock from
a normal spinlock to a raw spinlock.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/io-wq.c')
-rw-r--r-- | fs/io-wq.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/io-wq.c b/fs/io-wq.c index f8a5f172b9eb..c369910de793 100644 --- a/fs/io-wq.c +++ b/fs/io-wq.c @@ -48,7 +48,7 @@ struct io_worker { struct io_wqe *wqe; struct io_wq_work *cur_work; - spinlock_t lock; + raw_spinlock_t lock; struct completion ref_done; @@ -528,9 +528,9 @@ static void io_assign_current_work(struct io_worker *worker, cond_resched(); } - spin_lock(&worker->lock); + raw_spin_lock(&worker->lock); worker->cur_work = work; - spin_unlock(&worker->lock); + raw_spin_unlock(&worker->lock); } static void io_wqe_enqueue(struct io_wqe *wqe, struct io_wq_work *work); @@ -814,7 +814,7 @@ fail: refcount_set(&worker->ref, 1); worker->wqe = wqe; - spin_lock_init(&worker->lock); + raw_spin_lock_init(&worker->lock); init_completion(&worker->ref_done); if (index == IO_WQ_ACCT_BOUND) @@ -980,13 +980,13 @@ static bool io_wq_worker_cancel(struct io_worker *worker, void *data) * Hold the lock to avoid ->cur_work going out of scope, caller * may dereference the passed in work. */ - spin_lock(&worker->lock); + raw_spin_lock(&worker->lock); if (worker->cur_work && match->fn(worker->cur_work, match->data)) { set_notify_signal(worker->task); match->nr_running++; } - spin_unlock(&worker->lock); + raw_spin_unlock(&worker->lock); return match->nr_running && !match->cancel_all; } |