mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
mm/zsmalloc: convert __free_zspage() to use zpdesc
Introduce zpdesc_is_locked() and convert __free_zspage() to use zpdesc. Link: https://lkml.kernel.org/r/20241216150450.1228021-13-42.hyeyoo@gmail.com Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Signed-off-by: Alex Shi <alexs@kernel.org> Acked-by: Sergey Senozhatsky <senozhatsky@chromium.org> Tested-by: Sergey 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: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
73349afa00
commit
7f0b0c6642
|
|
@ -165,4 +165,8 @@ static inline struct zone *zpdesc_zone(struct zpdesc *zpdesc)
|
|||
return page_zone(zpdesc_page(zpdesc));
|
||||
}
|
||||
|
||||
static inline bool zpdesc_is_locked(struct zpdesc *zpdesc)
|
||||
{
|
||||
return folio_test_locked(zpdesc_folio(zpdesc));
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -878,23 +878,23 @@ static int trylock_zspage(struct zspage *zspage)
|
|||
static void __free_zspage(struct zs_pool *pool, struct size_class *class,
|
||||
struct zspage *zspage)
|
||||
{
|
||||
struct page *page, *next;
|
||||
struct zpdesc *zpdesc, *next;
|
||||
|
||||
assert_spin_locked(&class->lock);
|
||||
|
||||
VM_BUG_ON(get_zspage_inuse(zspage));
|
||||
VM_BUG_ON(zspage->fullness != ZS_INUSE_RATIO_0);
|
||||
|
||||
next = page = get_first_page(zspage);
|
||||
next = zpdesc = get_first_zpdesc(zspage);
|
||||
do {
|
||||
VM_BUG_ON_PAGE(!PageLocked(page), page);
|
||||
next = get_next_page(page);
|
||||
reset_zpdesc(page_zpdesc(page));
|
||||
unlock_page(page);
|
||||
dec_zone_page_state(page, NR_ZSPAGES);
|
||||
put_page(page);
|
||||
page = next;
|
||||
} while (page != NULL);
|
||||
VM_BUG_ON_PAGE(!zpdesc_is_locked(zpdesc), zpdesc_page(zpdesc));
|
||||
next = get_next_zpdesc(zpdesc);
|
||||
reset_zpdesc(zpdesc);
|
||||
zpdesc_unlock(zpdesc);
|
||||
zpdesc_dec_zone_page_state(zpdesc);
|
||||
zpdesc_put(zpdesc);
|
||||
zpdesc = next;
|
||||
} while (zpdesc != NULL);
|
||||
|
||||
cache_free_zspage(pool, zspage);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user