erofs: fix memory leak of LZMA global compressed deduplication
[ Upstream commit75a5221630
] When stressing microLZMA EROFS images with the new global compressed deduplication feature enabled (`-Ededupe`), I found some short-lived temporary pages weren't properly released, which could slowly cause unexpected OOMs hours later. Let's fix it now (LZ4 and DEFLATE don't have this issue.) Fixes:5c2a64252c
("erofs: introduce partial-referenced pclusters") Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com> Link: https://lore.kernel.org/r/20230907050542.97152-1-hsiangkao@linux.alibaba.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
91aeb418b9
commit
6a5a8f0a97
|
@ -217,9 +217,12 @@ int z_erofs_lzma_decompress(struct z_erofs_decompress_req *rq,
|
||||||
strm->buf.out_size = min_t(u32, outlen,
|
strm->buf.out_size = min_t(u32, outlen,
|
||||||
PAGE_SIZE - pageofs);
|
PAGE_SIZE - pageofs);
|
||||||
outlen -= strm->buf.out_size;
|
outlen -= strm->buf.out_size;
|
||||||
if (!rq->out[no] && rq->fillgaps) /* deduped */
|
if (!rq->out[no] && rq->fillgaps) { /* deduped */
|
||||||
rq->out[no] = erofs_allocpage(pagepool,
|
rq->out[no] = erofs_allocpage(pagepool,
|
||||||
GFP_KERNEL | __GFP_NOFAIL);
|
GFP_KERNEL | __GFP_NOFAIL);
|
||||||
|
set_page_private(rq->out[no],
|
||||||
|
Z_EROFS_SHORTLIVED_PAGE);
|
||||||
|
}
|
||||||
if (rq->out[no])
|
if (rq->out[no])
|
||||||
strm->buf.out = kmap(rq->out[no]) + pageofs;
|
strm->buf.out = kmap(rq->out[no]) + pageofs;
|
||||||
pageofs = 0;
|
pageofs = 0;
|
||||||
|
|
Loading…
Reference in New Issue