On Thu, Feb 14, 2019 at 01:35:37PM +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; > - > + while (!list_empty(list)) { > + page = lru_to_page(list); > VM_BUG_ON_PAGE(PageLRU(page), page); > - list_del(&page->lru); > if (unlikely(!page_evictable(page))) { > + list_del_init(&page->lru);
Why change to list_del_init? It's more special than list_del but doesn't seem needed since the page is list_add()ed later. That postprocess script from patch 1 seems kinda broken before this series, and still is. Not that it should block this change. Out of curiosity did you get it to run?