lkml.org 
[lkml]   [2022]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 089/389] erofs: avoid consecutive detection for Highmem memory
    Date
    From: Gao Xiang <hsiangkao@linux.alibaba.com>

    [ Upstream commit 448b5a1548d87c246c3d0c3df8480d3c6eb6c11a ]

    Currently, vmap()s are avoided if physical addresses are
    consecutive for decompressed buffers.

    I observed that is very common for 4KiB pclusters since the
    numbers of decompressed pages are almost 2 or 3.

    However, such detection doesn't work for Highmem pages on
    32-bit machines, let's fix it now.

    Reported-by: Liu Jinbao <liujinbao1@xiaomi.com>
    Fixes: 7fc45dbc938a ("staging: erofs: introduce generic decompression backend")
    Link: https://lore.kernel.org/r/20220708101001.21242-1-hsiangkao@linux.alibaba.com
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/erofs/decompressor.c | 16 ++++++++++------
    1 file changed, 10 insertions(+), 6 deletions(-)

    diff --git a/fs/erofs/decompressor.c b/fs/erofs/decompressor.c
    index 23b74b8e8f96..38eeec5e3032 100644
    --- a/fs/erofs/decompressor.c
    +++ b/fs/erofs/decompressor.c
    @@ -56,14 +56,18 @@ static int z_erofs_lz4_prepare_destpages(struct z_erofs_decompress_req *rq,

    if (page) {
    __clear_bit(j, bounced);
    - if (kaddr) {
    - if (kaddr + PAGE_SIZE == page_address(page))
    + if (!PageHighMem(page)) {
    + if (!i) {
    + kaddr = page_address(page);
    + continue;
    + }
    + if (kaddr &&
    + kaddr + PAGE_SIZE == page_address(page)) {
    kaddr += PAGE_SIZE;
    - else
    - kaddr = NULL;
    - } else if (!i) {
    - kaddr = page_address(page);
    + continue;
    + }
    }
    + kaddr = NULL;
    continue;
    }
    kaddr = NULL;
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-23 13:18    [W:4.542 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site