lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 049/800] btrfs: compression: dont try to compress if we dont have enough pages
    Date
    From: David Sterba <dsterba@suse.com>

    commit f2165627319ffd33a6217275e5690b1ab5c45763 upstream.

    The early check if we should attempt compression does not take into
    account the number of input pages. It can happen that there's only one
    page, eg. a tail page after some ranges of the BTRFS_MAX_UNCOMPRESSED
    have been processed, or an isolated page that won't be converted to an
    inline extent.

    The single page would be compressed but a later check would drop it
    again because the result size must be at least one block shorter than
    the input. That can never work with just one page.

    CC: stable@vger.kernel.org # 4.4+
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/btrfs/inode.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/fs/btrfs/inode.c
    +++ b/fs/btrfs/inode.c
    @@ -603,7 +603,7 @@ again:
    * inode has not been flagged as nocompress. This flag can
    * change at any time if we discover bad compression ratios.
    */
    - if (inode_need_compress(BTRFS_I(inode), start, end)) {
    + if (nr_pages > 1 && inode_need_compress(BTRFS_I(inode), start, end)) {
    WARN_ON(pages);
    pages = kcalloc(nr_pages, sizeof(struct page *), GFP_NOFS);
    if (!pages) {

    \
     
     \ /
      Last update: 2021-07-12 10:15    [W:3.726 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site