| From: Nhat Pham <nphamcs@gmail.com> |
| Subject: zsmalloc: implement writeback mechanism for zsmalloc (fix) |
| Date: Wed, 23 Nov 2022 11:17:03 -0800 |
| |
| Use get_first_page(), and add cond_resched() in retry loop. |
| |
| Link: https://lkml.kernel.org/r/20221123191703.2902079-3-nphamcs@gmail.com |
| Signed-off-by: Nhat Pham <nphamcs@gmail.com> |
| Suggested-by: Sergey Senozhatsky <senozhatsky@chromium.org> |
| Cc: Johannes Weiner <hannes@cmpxchg.org> |
| Cc: Minchan Kim <minchan@kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| mm/zsmalloc.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/mm/zsmalloc.c~zsmalloc-implement-writeback-mechanism-for-zsmalloc-fix |
| +++ a/mm/zsmalloc.c |
| @@ -2509,12 +2509,13 @@ static int zs_reclaim_page(struct zs_poo |
| remove_zspage(class, zspage, fullness); |
| |
| spin_unlock(&pool->lock); |
| + cond_resched(); |
| |
| /* Lock backing pages into place */ |
| lock_zspage(zspage); |
| |
| obj_idx = 0; |
| - page = zspage->first_page; |
| + page = get_first_page(zspage); |
| while (1) { |
| handle = find_alloced_obj(class, page, &obj_idx); |
| if (!handle) { |
| _ |