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);

Reply via email to