Messages in this thread | | | Subject | Re: [PATCH 4/4] mm: Generalize putback scan functions | From | Kirill Tkhai <> | Date | Thu, 14 Feb 2019 13:29:01 +0300 |
| |
On 13.02.2019 22:20, Daniel Jordan wrote: > On Tue, Feb 12, 2019 at 06:14:16PM +0300, Kirill Tkhai wrote: >> +static unsigned noinline_for_stack move_pages_to_lru(struct lruvec *lruvec, >> + struct list_head *list) >> { >> struct pglist_data *pgdat = lruvec_pgdat(lruvec); >> + int nr_pages, nr_moved = 0; >> LIST_HEAD(pages_to_free); >> + struct page *page; >> + enum lru_list lru; >> >> - /* >> - * Put back any unfreeable pages. >> - */ >> - while (!list_empty(page_list)) { >> - struct page *page = lru_to_page(page_list); >> - int lru; >> - >> - VM_BUG_ON_PAGE(PageLRU(page), page); >> - list_del(&page->lru); >> + while (!list_empty(list)) { >> + page = lru_to_page(list); >> if (unlikely(!page_evictable(page))) { >> + list_del_init(&page->lru); >> spin_unlock_irq(&pgdat->lru_lock); >> putback_lru_page(page); >> spin_lock_irq(&pgdat->lru_lock); >> continue; >> } >> - >> lruvec = mem_cgroup_page_lruvec(page, pgdat); >> >> + VM_BUG_ON_PAGE(PageLRU(page), page); > > Nit, but moving the BUG down here weakens it a little bit since we miss > checking it if the page is unevictable.
Yeah, this is bad.
> Maybe worth pointing out in the changelog that the main difference from > combining these two functions is that we're now checking for !page_evictable > coming from shrink_active_list, which shouldn't change any behavior since that > path works with evictable pages only.
Sounds good.
| |