Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit abde73c7 authored by Sahitya Tummala's avatar Sahitya Tummala Committed by Jaegeuk Kim
Browse files

f2fs: fix unnecessary periodic wakeup of discard thread when dev is busy



When dev is busy, discard thread wake up timeout can be aligned with the
exact time that it needs to wait for dev to come out of busy. This helps
to avoid unnecessary periodic wakeups and thus save some power.

Signed-off-by: default avatarSahitya Tummala <stummala@codeaurora.org>
Reviewed-by: default avatarChao Yu <yuchao0@huawei.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 7d20c8ab
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -1564,6 +1564,8 @@ static int issue_discard_thread(void *data)
	struct discard_policy dpolicy;
	struct discard_policy dpolicy;
	unsigned int wait_ms = DEF_MIN_DISCARD_ISSUE_TIME;
	unsigned int wait_ms = DEF_MIN_DISCARD_ISSUE_TIME;
	int issued;
	int issued;
	unsigned long interval = sbi->interval_time[REQ_TIME] * HZ;
	long delta;


	set_freezable();
	set_freezable();


@@ -1600,6 +1602,10 @@ static int issue_discard_thread(void *data)
			__wait_all_discard_cmd(sbi, &dpolicy);
			__wait_all_discard_cmd(sbi, &dpolicy);
			wait_ms = dpolicy.min_interval;
			wait_ms = dpolicy.min_interval;
		} else if (issued == -1){
		} else if (issued == -1){
			delta = (sbi->last_time[REQ_TIME] + interval) - jiffies;
			if (delta > 0)
				wait_ms = jiffies_to_msecs(delta);
			else
				wait_ms = dpolicy.mid_interval;
				wait_ms = dpolicy.mid_interval;
		} else {
		} else {
			wait_ms = dpolicy.max_interval;
			wait_ms = dpolicy.max_interval;