]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
blk-mq: delete task running check in blk_hctx_poll()
authorFengnan Chang <fengnanchang@gmail.com>
Wed, 10 Dec 2025 08:55:00 +0000 (16:55 +0800)
committerJens Axboe <axboe@kernel.dk>
Wed, 10 Dec 2025 09:40:52 +0000 (02:40 -0700)
blk_hctx_poll() always checks if the task is running or not, and returns
1 if the task is running. This is a leftover from when polled IO was
purely for synchronous IO, and doesn't make sense anymore when polled IO
is purely asynchronous. Similarly, marking the task as TASK_RUNNING is
also superflous, as the very much has to be running to enter the
function in the first place.

It looks like there has been this judgment for historical reasons, and
in very early versions of this function the user would set the process
state to TASK_UNINTERRUPTIBLE.

Signed-off-by: Diangang Li <lidiangang@bytedance.com>
Signed-off-by: Fengnan Chang <changfengnan@bytedance.com>
[axboe: kill all remnants of task running, pointless now. massage message]
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c

index 049e9dce114993301eadab4086878ed2383f84b6..1978eef95dca3fb332a73aeff7b9613ee770a8a3 100644 (file)
@@ -5192,27 +5192,19 @@ EXPORT_SYMBOL_GPL(blk_mq_update_nr_hw_queues);
 static int blk_hctx_poll(struct request_queue *q, struct blk_mq_hw_ctx *hctx,
                         struct io_comp_batch *iob, unsigned int flags)
 {
-       long state = get_current_state();
        int ret;
 
        do {
                ret = q->mq_ops->poll(hctx, iob);
-               if (ret > 0) {
-                       __set_current_state(TASK_RUNNING);
+               if (ret > 0)
                        return ret;
-               }
-
-               if (signal_pending_state(state, current))
-                       __set_current_state(TASK_RUNNING);
-               if (task_is_running(current))
+               if (task_sigpending(current))
                        return 1;
-
                if (ret < 0 || (flags & BLK_POLL_ONESHOT))
                        break;
                cpu_relax();
        } while (!need_resched());
 
-       __set_current_state(TASK_RUNNING);
        return 0;
 }