VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

More than 9999 Commits   32 Branches   54 Tags
author: Jan Kara <jack@suse.cz> 2020-06-05 16:16:18 +0200 committer: Jens Axboe <axboe@kernel.dk> 2021-01-27 09:16:00 -0700 commit: 7684fbde45169e6de15c180b1c084d2005e99961 parent: 28c6def009192b673f92ea357dfb535ba15e00a4
Commit Summary:
bfq: Use only idle IO periods for think time calculations
Diffstat:
1 file changed, 9 insertions, 1 deletion
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
index a0471ff97120..dfa87e360d71 100644
--- a/block/bfq-iosched.c
+++ b/block/bfq-iosched.c
@@ -5278,8 +5278,16 @@ static void bfq_update_io_thinktime(struct bfq_data *bfqd,
 				    struct bfq_queue *bfqq)
 {
 	struct bfq_ttime *ttime = &bfqq->ttime;
-	u64 elapsed = ktime_get_ns() - bfqq->ttime.last_end_request;
+	u64 elapsed;
 
+	/*
+	 * We are really interested in how long it takes for the queue to
+	 * become busy when there is no outstanding IO for this queue. So
+	 * ignore cases when the bfq queue has already IO queued.
+	 */
+	if (bfqq->dispatched || bfq_bfqq_busy(bfqq))
+		return;
+	elapsed = ktime_get_ns() - bfqq->ttime.last_end_request;
 	elapsed = min_t(u64, elapsed, 2ULL * bfqd->bfq_slice_idle);
 
 	ttime->ttime_samples = (7*ttime->ttime_samples + 256) / 8;