On Wed, Nov 27, 2024 at 11:00 PM Chengming Zhou <chengming.zhou@xxxxxxxxx> wrote: > > How about introducing a `zswap_compress_folio()` interface which > can be used by `zswap_store()`? > ``` > zswap_store() > nr_pages = folio_nr_pages(folio) > > entries = zswap_alloc_entries(nr_pages) > > ret = zswap_compress_folio(folio, entries, pool) > > // store entries into xarray and LRU list > ``` > > And this version `zswap_compress_folio()` is very simple for now: > ``` > zswap_compress_folio() > nr_pages = folio_nr_pages(folio) > > for (index = 0; index < nr_pages; ++index) { > struct page *page = folio_page(folio, index); > > if (!zswap_compress(page, &entries[index], pool)) > return false; > } > > return true; > ``` > This can be easily extended to support your "batched" version. > > Then the old `zswap_store_page()` could be removed. > > The good point is simplicity, that we don't need to slice folio > into multiple batches, then repeat the common operations for each > batch, like preparing entries, storing into xarray and LRU list... > +1.