> +             /*
> +              * When a device_private page is freed, the page->mapping field
> +              * may still contain a (stale) mapping value. For example, the
> +              * lower bits of page->mapping may still identify the page as
> +              * an anonymous page. Ultimately, this entire field is just
> +              * stale and wrong, and it will cause errors if not cleared.
> +              * One example is:
> +              *
> +              *  migrate_vma_pages()
> +              *    migrate_vma_insert_page()
> +              *      page_add_new_anon_rmap()
> +              *        __page_set_anon_rmap()
> +              *          ...checks page->mapping, via PageAnon(page) call,
> +              *            and incorrectly concludes that the page is an
> +              *            anonymous page. Therefore, it incorrectly,
> +              *            silently fails to set up the new anon rmap.
> +              *
> +              * For other types of ZONE_DEVICE pages, migration is either
> +              * handled differently or not done at all, so there is no need
> +              * to clear page->mapping.
> +              */
> +             if (is_device_private_page(page))
> +                     page->mapping = NULL;
> +

Thanks, especially for the long comment.

Reviewed-by: Christoph Hellwig <h...@lst.de>

Reply via email to