From: Alex Shi <alexs@xxxxxxxxxx> According to Metthew's plan, the page descriptor will be replace by a 8 bytes mem_desc on destination purpose. https://lore.kernel.org/lkml/YvV1KTyzZ+Jrtj9x@xxxxxxxxxxxxxxxxxxxx/ Here is a implement on z3fold to replace page descriptor by zpdesc, which is still overlay on struct page now. but it's a step move forward above destination. To name the struct zpdesc instead of z3fold_desc, since there are 3 zpool usages under zswap, zbud, z3fold, zsmalloc. It looks like we may extend the zpdesc to zbud and zsmalloc, combined their usage into one. For zpdesc(page), z3fold just uses the 5th member zppage_flag, which match with page.private. Potentially uses the first member flags for headless PG_locked, list_head lru and page.mapping|PAGE_MAPPING_MOVABLE for page migration. This patachset could save 26Kbyetes z3fold.o size, basely saving come from the page to folio conversion. Thanks a lot! Alex Alex Shi (15): mm/z3fold: add zpdesc struct and helper and use them in z3fold_page_isolate mm/z3fold: use zpdesc in z3fold_page_migrate mm/z3fold: use zpdesc in z3fold_page_putback mm/z3fold: use zpdesc in get/put_z3fold_header funcs mm/z3fold: use zpdesc in init_z3fold_page mm/z3fold: use zpdesc in free_z3fold_page mm/z3fold: convert page to zpdesc in __release_z3fold_page mm/z3fold: use zpdesc free_pages_work mm/z3fold: use zpdesc in z3fold_compact_page and do_compact_page mm/z3fold: use zpdesc in __z3fold_alloc mm/z3fold: use zpdesc in z3fold_alloc mm/z3fold: use zpdesc in free_z3fold_page and z3fold_free mm/z3fold: use zpdesc in z3fold_map/z3fold_unmap mm/z3fold: introduce __zpdesc_set_movable mm/z3fold: introduce __zpdesc_clear_movable mm/z3fold.c | 190 +++++++++++++++++++++++++++------------------------- mm/zpdesc.h | 87 ++++++++++++++++++++++++ 2 files changed, 184 insertions(+), 93 deletions(-) create mode 100644 mm/zpdesc.h -- 2.43.0