RFC v2: https://lore.kernel.org/linux-mm/20230713042037.980211-1-42.hyeyoo@xxxxxxxxx/ v2 -> v3: - rebased to the latest mm-unstable - adjusted comments from Sergey Senozhatsky (Moving zsdesc definition, kerneldoc fix) and Yosry Ahmed (adding memcg_data field to zsdesc) V3 update is a bit late, but I still believe this is worth doing. It would be nice to get comments/reviews/acks from maintainers/people. Cover Letter: The purpose of this series is to define own memory descriptor for zsmalloc, instead of re-using various fields of struct page. This is a part of the effort to reduce the size of struct page to unsigned long and enable dynamic allocation of memory descriptors. While [1] outlines this ultimate objective, the current use of struct page is highly dependent on its definition, making it challenging to separately allocate memory descriptors. Therefore, this series introduces new descriptor for zsmalloc, called zsdesc. It overlays struct page for now, but will eventually be allocated independently in the future. And apart from dynamic allocation of descriptors, this is a nice cleanup. This work is also available at: https://gitlab.com/hyeyoo/linux/-/tree/separate_zsdesc_rfc-v3 [1] State Of The Page, August 2022 https://lore.kernel.org/lkml/YvV1KTyzZ+Jrtj9x@xxxxxxxxxxxxxxxxxxxx Hyeonggon Yoo (21): mm/zsmalloc: create new struct zsdesc mm/zsmalloc: add utility functions for zsdesc mm/zsmalloc: replace first_page to first_zsdesc in struct zspage mm/zsmalloc: add alternatives of frequently used helper functions mm/zsmalloc: convert {try,}lock_zspage() to use zsdesc mm/zsmalloc: convert __zs_{map,unmap}_object() to use zsdesc mm/zsmalloc: convert obj_to_location() and its users to use zsdesc mm/zsmalloc: convert obj_malloc() to use zsdesc mm/zsmalloc: convert create_page_chain() and its users to use zsdesc mm/zsmalloc: convert obj_allocated() and related helpers to use zsdesc mm/zsmalloc: convert init_zspage() to use zsdesc mm/zsmalloc: convert obj_to_page() and zs_free() to use zsdesc mm/zsmalloc: convert reset_page() to reset_zsdesc() mm/zsmalloc: convert zs_page_{isolate,migrate,putback} to use zsdesc mm/zsmalloc: convert __free_zspage() to use zsdesc mm/zsmalloc: convert location_to_obj() to use zsdesc mm/zsmalloc: convert migrate_zspage() to use zsdesc mm/zsmalloc: convert get_zspage() to take zsdesc mm/zsmalloc: convert SetZsPageMovable() to use zsdesc mm/zsmalloc: remove now unused helper functions mm/zsmalloc: convert {get,set}_first_obj_offset() to use zsdesc mm/zsmalloc.c | 578 +++++++++++++++++++++++++++++++------------------- 1 file changed, 364 insertions(+), 214 deletions(-) -- 2.39.3