lkml.org 
[lkml]   [2022]   [Jan]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 007/200] btrfs: add back missing dirty page rate limiting to defrag
    Date
    From: Filipe Manana <fdmanana@suse.com>

    commit 3c9d31c715948aaff0ee6d322a91a2dec07770bf upstream.

    A defrag operation can dirty a lot of pages, specially if operating on
    the entire file or a large file range. Any task dirtying pages should
    periodically call balance_dirty_pages_ratelimited(), as stated in that
    function's comments, otherwise they can leave too many dirty pages in
    the system. This is what we did before the refactoring in 5.16, and
    it should have remained, just like in the buffered write path and
    relocation. So restore that behaviour.

    Fixes: 7b508037d4cac3 ("btrfs: defrag: use defrag_one_cluster() to implement btrfs_defrag_file()")
    CC: stable@vger.kernel.org # 5.16
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/btrfs/ioctl.c | 5 +++++
    1 file changed, 5 insertions(+)

    --- a/fs/btrfs/ioctl.c
    +++ b/fs/btrfs/ioctl.c
    @@ -1553,6 +1553,7 @@ int btrfs_defrag_file(struct inode *inod
    }

    while (cur < last_byte) {
    + const unsigned long prev_sectors_defragged = sectors_defragged;
    u64 cluster_end;

    /* The cluster size 256K should always be page aligned */
    @@ -1584,6 +1585,10 @@ int btrfs_defrag_file(struct inode *inod
    cluster_end + 1 - cur, extent_thresh,
    newer_than, do_compress,
    &sectors_defragged, max_to_defrag);
    +
    + if (sectors_defragged > prev_sectors_defragged)
    + balance_dirty_pages_ratelimited(inode->i_mapping);
    +
    btrfs_inode_unlock(inode, 0);
    if (ret < 0)
    break;

    \
     
     \ /
      Last update: 2022-01-31 13:09    [W:3.445 / U:0.800 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site