• Sahitya Tummala's avatar
    f2fs: fix is_idle() check for discard type · 56659ce8
    Sahitya Tummala authored
    The discard thread should issue upto dpolicy->max_requests at once
    and wait for all those discard requests at once it reaches
    dpolicy->max_requests. It should then sleep for dpolicy->min_interval
    timeout before issuing the next batch of discard requests. But in the
    current code of is_idle(), it checks for dcc_info->queued_discard and
    aborts issuing the discard batch of max_requests. This
    dcc_info->queued_discard will be true always once one discard command
    is issued.
    
    It is thus resulting into this type of discard request pattern -
    
    - Issue discard request#1
    - is_idle() returns false, discard thread waits for request#1 and then
      sleeps for min_interval 50ms.
    - Issue discard request#2
    - is_idle() returns false, discard thread waits for request#2 and then
      sleeps for min_interval 50ms.
    - and so on for all other discard requests, assuming f2fs is idle w.r.t
      other conditions.
    
    With this fix, the pattern will look like this -
    
    - Issue discard request#1
    - Issue discard request#2
      and so on upto max_requests of 8
    - Issue discard request#8
    - wait for min_interval 50ms.
    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>
    56659ce8
f2fs.h 116 KB