erofs: avoid consecutive detection for Highmem memory
[ Upstream commit448b5a1548
] 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:7fc45dbc93
("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>
This commit is contained in:
parent
2478e36ec4
commit
55a31d4abd
|
@ -93,14 +93,18 @@ static int z_erofs_lz4_prepare_dstpages(struct z_erofs_lz4_decompress_ctx *ctx,
|
|||
|
||||
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;
|
||||
|
|
Loading…
Reference in New Issue