On Mon, Jun 22, 2026 at 05:26:53PM +0200, Doehyun Baek wrote: > However, both zswapped and zswap_incomp are memory_stats[] entries, so > memory.stat prints them through memcg_page_state_output(). Since > MEMCG_ZSWAP_INCOMP is not special-cased as a raw count, the stored page > count is multiplied by the default PAGE_SIZE unit and exported as bytes. > > unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item) > { > return memcg_page_state(memcg, item) * > memcg_page_state_output_unit(item); > } Ah, I messed up how memcg_page_state_output_unit() is used. The printed values are amounts (in bytes). > Separately, this matches the existing documentation style for zswapped, > whose exported value is described as a memory amount: > > zswapped > Amount of application memory swapped out to zswap. > > Since zswap_incomp follows the same memory.stat output path, I think its > documentation should describe the exported value as a memory amount too. > > I also boot-tested this in QEMU with the current tree and zswap enabled. > With incompressible pages pushed into zswap, memory.stat showed: > > zswap 87822336 > zswapped 87822336 > zswap_incomp 87822336 Thanks for the test and for the fix! > > The zswap_incomp value there is byte-valued; it is not a plain page > count. It also matches zswapped in this all-incompressible case, which > is consistent with both being exported as memory amounts. Acked-by: Michal Koutný