OSDN Git Service

f2fs: fix unnecessary periodic wakeup of discard thread when dev is busy
authorSahitya Tummala <stummala@codeaurora.org>
Fri, 31 Aug 2018 09:39:26 +0000 (15:09 +0530)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 5 Sep 2018 20:40:32 +0000 (13:40 -0700)
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: Sahitya Tummala <stummala@codeaurora.org>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/segment.c

index c372ff7..f36a4b7 100644 (file)
@@ -1564,6 +1564,8 @@ static int issue_discard_thread(void *data)
        struct discard_policy dpolicy;
        unsigned int wait_ms = DEF_MIN_DISCARD_ISSUE_TIME;
        int issued;
+       unsigned long interval = sbi->interval_time[REQ_TIME] * HZ;
+       long delta;
 
        set_freezable();
 
@@ -1600,7 +1602,11 @@ static int issue_discard_thread(void *data)
                        __wait_all_discard_cmd(sbi, &dpolicy);
                        wait_ms = dpolicy.min_interval;
                } else if (issued == -1){
-                       wait_ms = dpolicy.mid_interval;
+                       delta = (sbi->last_time[REQ_TIME] + interval) - jiffies;
+                       if (delta > 0)
+                               wait_ms = jiffies_to_msecs(delta);
+                       else
+                               wait_ms = dpolicy.mid_interval;
                } else {
                        wait_ms = dpolicy.max_interval;
                }