[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150825140322.GC6285@dhcp22.suse.cz>
Date: Tue, 25 Aug 2015 16:03:22 +0200
From: Michal Hocko <mhocko@...nel.org>
To: Yaowei Bai <bywxiaobai@....com>
Cc: akpm@...ux-foundation.org, mgorman@...e.de, vbabka@...e.cz,
js1304@...il.com, hannes@...xchg.org, alexander.h.duyck@...hat.com,
sasha.levin@...cle.com, linux-mm@...ck.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] mm/page_alloc: add a helper function to check page
before alloc/free
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.
> - 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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists