lkml.org 
[lkml]   [2019]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.1 080/141] f2fs: fix is_idle() check for discard type
    Date
    From: Sahitya Tummala <stummala@codeaurora.org>

    [ Upstream commit 56659ce838456c6f2315ce8a4bd686ac4b23e9d1 ]

    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: Sahitya Tummala <stummala@codeaurora.org>
    Reviewed-by: Chao Yu <yuchao0@huawei.com>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/f2fs/f2fs.h | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
    index f1157d5c62bb..1024550ad11a 100644
    --- a/fs/f2fs/f2fs.h
    +++ b/fs/f2fs/f2fs.h
    @@ -2194,7 +2194,7 @@ static inline bool is_idle(struct f2fs_sb_info *sbi, int type)
    get_pages(sbi, F2FS_DIO_WRITE))
    return false;

    - if (SM_I(sbi) && SM_I(sbi)->dcc_info &&
    + if (type != DISCARD_TIME && SM_I(sbi) && SM_I(sbi)->dcc_info &&
    atomic_read(&SM_I(sbi)->dcc_info->queued_discard))
    return false;

    --
    2.20.1
    \
     
     \ /
      Last update: 2019-07-19 06:05    [W:4.083 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site