Message ID | 20240529111904.2069608-1-david@redhat.com (mailing list archive) |
---|---|
Headers | show |
Series | mm: page_type, zsmalloc and page_mapcount_reset() | expand |
On (24/05/29 13:18), David Hildenbrand wrote: > Wanting to remove the remaining abuser of _mapcount/page_type along with > page_mapcount_reset(), I stumbled over zsmalloc, which is yet to be > converted away from "struct page" [1]. > > Unfortunately, we cannot stop using the page_type field in zsmalloc code > completely for its own purposes. All other fields in "struct page" are > used one way or the other. Could we simply store a 2-byte offset value > at the beginning of each page? Likely, but that will require a bit more > work; and once we have memdesc we might want to move the offset in there > (struct zsalloc?) again. > > ... but we can limit the abuse to 16 bit, glue it to a page type that > must be set, and document it. page_has_type() will always successfully > indicate such zsmalloc pages, and such zsmalloc pages only. > > We lose zsmalloc support for PAGE_SIZE > 64KB, which should be tolerable. > We could use more bits from the page type, but 16 bit sounds like a good > idea for now. > > So clarify the _mapcount/page_type documentation, use a proper page_type > for zsmalloc, and remove page_mapcount_reset(). > > Briefly tested with zram on x86-64. > > [1] https://lore.kernel.org/all/20231130101242.2590384-1-42.hyeyoo@gmail.com/ > > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> > Cc: Mike Rapoport <rppt@kernel.org> > Cc: Minchan Kim <minchan@kernel.org> > Cc: Sergey Senozhatsky <senozhatsky@chromium.org> > Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com> Tested-by: Sergey Senozhatsky <senozhatsky@chromium.org> # zram/zsmalloc workloads