blk: optimization for classic polling

"Linux Kernel Mailing List" <[email protected]> Sat, 17 Feb 2018 19:17:15 +0000 (UTC)
Newsgroups gmane.linux.kernel.commits.head
Message-ID <[email protected]>
Web:        https://git.kernel.org/torvalds/c/67b4110f8c8d16e588d7730db8e8b01b32c1bd8b
Commit:     67b4110f8c8d16e588d7730db8e8b01b32c1bd8b
Parent:     178e834c47b0d01352c48730235aae69898fbc02
Refname:    refs/heads/master
Author:     Nitesh Shetty <[email protected]>
AuthorDate: Tue Feb 13 21:18:12 2018 +0530
Committer:  Jens Axboe <[email protected]>
CommitDate: Tue Feb 13 09:12:04 2018 -0700

    blk: optimization for classic polling
    
    This removes the dependency on interrupts to wake up task. Set task
    state as TASK_RUNNING, if need_resched() returns true,
    while polling for IO completion.
    Earlier, polling task used to sleep, relying on interrupt to wake it up.
    This made some IO take very long when interrupt-coalescing is enabled in
    NVMe.
    
    Reference:
    http://lists.infradead.org/pipermail/linux-nvme/2018-February/015435.html
    
    Changes since v2->v3:
            -using __set_current_state() instead of set_current_state()
    
    Changes since v1->v2:
            -setting task state once in blk_poll, instead of multiple
    callers.
    
    Signed-off-by: Nitesh Shetty <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
---
 block/blk-mq.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index df93102e2149..357492712b0e 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -3164,6 +3164,7 @@ static bool __blk_mq_poll(struct blk_mq_hw_ctx *hctx, struct request *rq)
 		cpu_relax();
 	}
 
+	__set_current_state(TASK_RUNNING);
 	return false;
 }
 
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html