On Mon, Aug 24, 2020 at 08:55:04PM +0800, Alex Shi wrote: > +++ b/mm/vmscan.c > @@ -1688,10 +1688,13 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, > > if (!TestClearPageLRU(page)) { > /* > - * This page may in other isolation path, > - * but we still hold lru_lock. > + * This page is being isolated in another > + * thread, but we still hold lru_lock. The > + * other thread must be holding a reference > + * to the page so this should never hit a > + * reference count of 0. > */ > - put_page(page); > + WARN_ON(put_page_testzero(page)); > goto busy; I read Hugh's review and that led me to take a look at this. We don't do it like this. Use the same pattern as elsewhere in mm: page_ref_sub(page, nr); VM_BUG_ON_PAGE(page_count(page) <= 0, page);