Acked-by: Chris Li <chrisl@xxxxxxxxxx> (Google) Chris On Mon, Dec 18, 2023 at 12:22 AM Chengming Zhou <zhouchengming@xxxxxxxxxxxxx> wrote: > > Change the dstmem size from 2 * PAGE_SIZE to only one page since > we only need at most one page when compress, and the "dlen" is also > PAGE_SIZE in acomp_request_set_params(). If the output size > PAGE_SIZE > we don't wanna store the output in zswap anyway. > > So change it to one page, and delete the stale comment. > > There is no any history about the reason why we needed 2 pages, it has > been 2 * PAGE_SIZE since the time zswap was first merged. > > According to Yosry and Nhat, one potential reason is that we used to > store a zswap header containing the swap entry in the compressed page > for writeback purposes, but we don't do that anymore. > > This patch works good in kernel build testing even when the input data > doesn't compress at all (i.e. dlen == PAGE_SIZE), which we can see > from the bpftrace tool: > > bpftrace -e 'k:zpool_malloc {@[(uint32)arg1==4096]=count()}' > @[1]: 2 > @[0]: 12011430 > > Reviewed-by: Yosry Ahmed <yosryahmed@xxxxxxxxxx> > Reviewed-by: Nhat Pham <nphamcs@xxxxxxxxx> > Signed-off-by: Chengming Zhou <zhouchengming@xxxxxxxxxxxxx> > --- > mm/zswap.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/mm/zswap.c b/mm/zswap.c > index 7ee54a3d8281..976f278aa507 100644 > --- a/mm/zswap.c > +++ b/mm/zswap.c > @@ -707,7 +707,7 @@ static int zswap_dstmem_prepare(unsigned int cpu) > struct mutex *mutex; > u8 *dst; > > - dst = kmalloc_node(PAGE_SIZE * 2, GFP_KERNEL, cpu_to_node(cpu)); > + dst = kmalloc_node(PAGE_SIZE, GFP_KERNEL, cpu_to_node(cpu)); > if (!dst) > return -ENOMEM; > > @@ -1662,8 +1662,7 @@ bool zswap_store(struct folio *folio) > sg_init_table(&input, 1); > sg_set_page(&input, page, PAGE_SIZE, 0); > > - /* zswap_dstmem is of size (PAGE_SIZE * 2). Reflect same in sg_list */ > - sg_init_one(&output, dst, PAGE_SIZE * 2); > + sg_init_one(&output, dst, PAGE_SIZE); > acomp_request_set_params(acomp_ctx->req, &input, &output, PAGE_SIZE, dlen); > /* > * it maybe looks a little bit silly that we send an asynchronous request, > > -- > b4 0.10.1