blk-mq: delete task running check in blk_hctx_poll()
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>pull/1354/merge
parent
2c38ec934d
commit
f22ecf9c14
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue