Messages in this thread | | | Date | Wed, 13 Feb 2019 14:20:11 -0500 | From | Daniel Jordan <> | Subject | Re: [PATCH 4/4] mm: Generalize putback scan functions |
| |
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.
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.
| |