Commit b5f469a1 authored by Alex Shi's avatar Alex Shi Committed by Andrew Morton
Browse files

mm/zsmalloc: introduce __zpdesc_clear/set_zsmalloc()

Add helper __zpdesc_clear_zsmalloc() for __ClearPageZsmalloc(),
__zpdesc_set_zsmalloc() for __SetPageZsmalloc(), and use them in callers.

[42.hyeyoo@gmail.com: keep reset_zpdesc() to use struct page]
Link: https://lkml.kernel.org/r/20241216150450.1228021-19-42.hyeyoo@gmail.com


Signed-off-by: default avatarAlex Shi <alexs@kernel.org>
Signed-off-by: default avatarHyeonggon Yoo <42.hyeyoo@gmail.com>
Acked-by: default avatarSergey Senozhatsky <senozhatsky@chromium.org>
Tested-by: default avatarSergey Senozhatsky <senozhatsky@chromium.org>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent fc5eec0d
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -155,6 +155,16 @@ static inline void __zpdesc_set_movable(struct zpdesc *zpdesc,
	__SetPageMovable(zpdesc_page(zpdesc), mops);
}

static inline void __zpdesc_set_zsmalloc(struct zpdesc *zpdesc)
{
	__SetPageZsmalloc(zpdesc_page(zpdesc));
}

static inline void __zpdesc_clear_zsmalloc(struct zpdesc *zpdesc)
{
	__ClearPageZsmalloc(zpdesc_page(zpdesc));
}

static inline bool zpdesc_is_isolated(struct zpdesc *zpdesc)
{
	return PageIsolated(zpdesc_page(zpdesc));
+3 −3
Original line number Diff line number Diff line
@@ -1001,13 +1001,13 @@ static struct zspage *alloc_zspage(struct zs_pool *pool,
		if (!zpdesc) {
			while (--i >= 0) {
				zpdesc_dec_zone_page_state(zpdescs[i]);
				__ClearPageZsmalloc(zpdesc_page(zpdescs[i]));
				__zpdesc_clear_zsmalloc(zpdescs[i]);
				free_zpdesc(zpdescs[i]);
			}
			cache_free_zspage(pool, zspage);
			return NULL;
		}
		__SetPageZsmalloc(zpdesc_page(zpdesc));
		__zpdesc_set_zsmalloc(zpdesc);

		zpdesc_inc_zone_page_state(zpdesc);
		zpdescs[i] = zpdesc;
@@ -1786,7 +1786,7 @@ static int zs_page_migrate(struct page *newpage, struct page *page,
	VM_BUG_ON_PAGE(!zpdesc_is_isolated(zpdesc), zpdesc_page(zpdesc));

	/* We're committed, tell the world that this is a Zsmalloc page. */
	__SetPageZsmalloc(zpdesc_page(newzpdesc));
	__zpdesc_set_zsmalloc(newzpdesc);

	/* The page is locked, so this pointer must remain valid */
	zspage = get_zspage(zpdesc);