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

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
...@@ -1564,6 +1564,8 @@ static int issue_discard_thread(void *data) ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment