lkml.org 
[lkml]   [2012]   [Jun]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] mm: do not use page_count without a page pin
    (2012/06/11 9:17), Minchan Kim wrote:
    > d179e84ba fixed the problem[1] in vmscan.c but same problem is here.
    > Let's fix it.
    >
    > [1] http://comments.gmane.org/gmane.linux.kernel.mm/65844
    >
    > I copy and paste d179e84ba's contents for description.
    >
    > "It is unsafe to run page_count during the physical pfn scan because
    > compound_head could trip on a dangling pointer when reading
    > page->first_page if the compound page is being freed by another CPU."
    >
    > Cc: Andrea Arcangeli<aarcange@redhat.com>
    > Cc: Mel Gorman<mgorman@suse.de>
    > Cc: Michal Hocko<mhocko@suse.cz>
    > Cc: KAMEZAWA Hiroyuki<kamezawa.hiroyu@jp.fujitsu.com>
    > Signed-off-by: Minchan Kim<minchan@kernel.org>
    > ---
    > mm/page_alloc.c | 6 +++++-
    > 1 file changed, 5 insertions(+), 1 deletion(-)
    >
    > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
    > index 266f267..019c4fe 100644
    > --- a/mm/page_alloc.c
    > +++ b/mm/page_alloc.c
    > @@ -5496,7 +5496,11 @@ __count_immobile_pages(struct zone *zone, struct page *page, int count)
    > continue;
    >
    > page = pfn_to_page(check);
    > - if (!page_count(page)) {
    > + /*
    > + * We can't use page_count withou pin a page
    > + * because another CPU can free compound page.
    > + */
    > + if (!atomic_read(&page->_count)) {
    > if (PageBuddy(page))
    > iter += (1<< page_order(page)) - 1;
    > continue;
    Nice Catch.

    Other than the comment fix already pointed out..
    Hmm...BTW, it seems this __count_xxx doesn't have any code for THP/Hugepage..
    so, we need more fixes for better code, I think.
    Hmm, Don't we need !PageTail() check and 'skip thp' code ?

    Thanks,
    -Kame



    \
     
     \ /
      Last update: 2012-06-11 10:02    [W:0.028 / U:32.180 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site