lkml.org 
[lkml]   [2015]   [Aug]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v2] mm/page_alloc: add a helper function to check page before alloc/free
On Tue, Aug 25, 2015 at 04:03:22PM +0200, Michal Hocko wrote:
> On Tue 25-08-15 21:26:30, Yaowei Bai wrote:
> [...]
> > static inline int check_new_page(struct page *page)
> > {
> > - const char *bad_reason = NULL;
> > - unsigned long bad_flags = 0;
> > -
> > - if (unlikely(page_mapcount(page)))
> > - bad_reason = "nonzero mapcount";
> > - if (unlikely(page->mapping != NULL))
> > - bad_reason = "non-NULL mapping";
> > - if (unlikely(atomic_read(&page->_count) != 0))
> > - bad_reason = "nonzero _count";
> > - if (unlikely(page->flags & __PG_HWPOISON)) {
> > - bad_reason = "HWPoisoned (hardware-corrupted)";
> > - bad_flags = __PG_HWPOISON;
> > - }
>
> You have removed this check AFAICS. Now looking at 39ad4f19671d ("mm:
> check __PG_HWPOISON separately from PAGE_FLAGS_CHECK_AT_*") I am not
> sure it is correct to check it in the free path as it was removed from
> the mask by this commit.

I just refactored these two function and it looks well, will resend it soon.

>
> > - if (unlikely(page->flags & PAGE_FLAGS_CHECK_AT_PREP)) {
> > - bad_reason = "PAGE_FLAGS_CHECK_AT_PREP flag set";
> > - bad_flags = PAGE_FLAGS_CHECK_AT_PREP;
> > - }
> > -#ifdef CONFIG_MEMCG
> > - if (unlikely(page->mem_cgroup))
> > - bad_reason = "page still charged to cgroup";
> > -#endif
> > - if (unlikely(bad_reason)) {
> > - bad_page(page, bad_reason, bad_flags);
> > - return 1;
> > - }
> > - return 0;
> > + return check_one_page(page, PAGE_FLAGS_CHECK_AT_PREP);
> > }
> >
> > static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags,
> > --
> > 1.9.1
> >
>
> --
> Michal Hocko
> SUSE Labs



\
 
 \ /
  Last update: 2015-08-27 15:21    [W:5.331 / U:0.004 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site