io-wq: Drop intermediate step between pending list and active work
authorGabriel Krisman Bertazi <krisman@suse.de>
Tue, 16 Apr 2024 02:10:54 +0000 (22:10 -0400)
committerJens Axboe <axboe@kernel.dk>
Wed, 17 Apr 2024 14:20:32 +0000 (08:20 -0600)
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: Gabriel Krisman Bertazi <krisman@suse.de>
Link: https://lore.kernel.org/r/20240416021054.3940-3-krisman@suse.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io-wq.c

index 318ed067dbf64d7d08ffb6339c6b93325ac57d02..d7fc6f6d4477234093c33c410bd96ca0f3b02525 100644 (file)
@@ -51,7 +51,6 @@ struct io_worker {
        struct io_wq *wq;
 
        struct io_wq_work *cur_work;
-       struct io_wq_work *next_work;
        raw_spinlock_t lock;
 
        struct completion ref_done;
@@ -539,7 +538,6 @@ static void io_assign_current_work(struct io_worker *worker,
 
        raw_spin_lock(&worker->lock);
        worker->cur_work = work;
-       worker->next_work = NULL;
        raw_spin_unlock(&worker->lock);
 }
 
@@ -573,7 +571,7 @@ static void io_worker_handle_work(struct io_wq_acct *acct,
                         * current work item for this worker.
                         */
                        raw_spin_lock(&worker->lock);
-                       worker->next_work = work;
+                       worker->cur_work = work;
                        raw_spin_unlock(&worker->lock);
                }
 
@@ -1008,8 +1006,7 @@ static bool io_wq_worker_cancel(struct io_worker *worker, void *data)
         * may dereference the passed in work.
         */
        raw_spin_lock(&worker->lock);
-       if (__io_wq_worker_cancel(worker, match, worker->cur_work) ||
-           __io_wq_worker_cancel(worker, match, worker->next_work))
+       if (__io_wq_worker_cancel(worker, match, worker->cur_work))
                match->nr_running++;
        raw_spin_unlock(&worker->lock);