Commit 24c3fc5c authored by Gabriel Krisman Bertazi's avatar Gabriel Krisman Bertazi Committed by Jens Axboe

io-wq: Drop intermediate step between pending list and active work

next_work is only used to make the work visible for
cancellation. Instead, we can just directly write to cur_work before
dropping the acct_lock and avoid the extra hop.
Signed-off-by: default avatarGabriel Krisman Bertazi <krisman@suse.de>
Link: https://lore.kernel.org/r/20240416021054.3940-3-krisman@suse.deSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 068c27e3
...@@ -51,7 +51,6 @@ struct io_worker { ...@@ -51,7 +51,6 @@ struct io_worker {
struct io_wq *wq; struct io_wq *wq;
struct io_wq_work *cur_work; struct io_wq_work *cur_work;
struct io_wq_work *next_work;
raw_spinlock_t lock; raw_spinlock_t lock;
struct completion ref_done; struct completion ref_done;
...@@ -539,7 +538,6 @@ static void io_assign_current_work(struct io_worker *worker, ...@@ -539,7 +538,6 @@ static void io_assign_current_work(struct io_worker *worker,
raw_spin_lock(&worker->lock); raw_spin_lock(&worker->lock);
worker->cur_work = work; worker->cur_work = work;
worker->next_work = NULL;
raw_spin_unlock(&worker->lock); raw_spin_unlock(&worker->lock);
} }
...@@ -573,7 +571,7 @@ static void io_worker_handle_work(struct io_wq_acct *acct, ...@@ -573,7 +571,7 @@ static void io_worker_handle_work(struct io_wq_acct *acct,
* current work item for this worker. * current work item for this worker.
*/ */
raw_spin_lock(&worker->lock); raw_spin_lock(&worker->lock);
worker->next_work = work; worker->cur_work = work;
raw_spin_unlock(&worker->lock); raw_spin_unlock(&worker->lock);
} }
...@@ -1008,8 +1006,7 @@ static bool io_wq_worker_cancel(struct io_worker *worker, void *data) ...@@ -1008,8 +1006,7 @@ static bool io_wq_worker_cancel(struct io_worker *worker, void *data)
* may dereference the passed in work. * may dereference the passed in work.
*/ */
raw_spin_lock(&worker->lock); raw_spin_lock(&worker->lock);
if (__io_wq_worker_cancel(worker, match, worker->cur_work) || if (__io_wq_worker_cancel(worker, match, worker->cur_work))
__io_wq_worker_cancel(worker, match, worker->next_work))
match->nr_running++; match->nr_running++;
raw_spin_unlock(&worker->lock); raw_spin_unlock(&worker->lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment