Re: Question About Functions "__free_pages_check" and "check_new_page" in page_alloc.c

From: Michal Hocko
Date: Mon May 16 2016 - 11:17:10 EST


On Mon 16-05-16 21:42:23, Wang Xiaoqiang wrote:
> Hi all,
>
> I am really confused about these two functions. The following code snippet:
>
> if(unlikely(atomic_read(&page->_mapcount) != -1))
> bad_reason ="nonzero mapcount";if(unlikely(page->mapping != NULL))
> bad_reason ="non-NULL mapping";if(unlikely(page_ref_count(page) !=0))
> bad_reason ="nonzero _count";
> ...
> Wouldn't the previous value of "bad_reason" be overwritten by
> the later? Hope to receive from you.

yes it would. Why that would matter. The checks should be in an order
which could give us a more specific reason with later checks. bad_page()
will then print more detailed information.
--
Michal Hocko
SUSE Labs