From f21dd35b7ab0cd7e36c523529d33f245f6f6de67 Mon Sep 17 00:00:00 2001 From: Shaohua Li Date: Mon, 21 Sep 2009 17:01:17 -0700 Subject: [PATCH] --- yaml --- r: 164368 b: refs/heads/master c: 6fb332fabd7288af9dbe7992394aa6ba97c1a537 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/page_alloc.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 0d3452797955..bfef022ff693 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 112067f0905b2de862c607ee62411cf47d2fe5c4 +refs/heads/master: 6fb332fabd7288af9dbe7992394aa6ba97c1a537 diff --git a/trunk/mm/page_alloc.c b/trunk/mm/page_alloc.c index 1a3a893ef50e..8a8302711725 100644 --- a/trunk/mm/page_alloc.c +++ b/trunk/mm/page_alloc.c @@ -1143,10 +1143,20 @@ struct page *buffered_rmqueue(struct zone *preferred_zone, /* Allocate more to the pcp list if necessary */ if (unlikely(&page->lru == &pcp->list)) { + int get_one_page = 0; + pcp->count += rmqueue_bulk(zone, 0, pcp->batch, &pcp->list, migratetype, cold); - page = list_entry(pcp->list.next, struct page, lru); + list_for_each_entry(page, &pcp->list, lru) { + if (get_pageblock_migratetype(page) != + MIGRATE_ISOLATE) { + get_one_page = 1; + break; + } + } + if (!get_one_page) + goto failed; } list_del(&page->lru);