From: Christoph Lameter Date: Tue, 26 Sep 2006 06:31:48 +0000 (-0700) Subject: [PATCH] Optimize free_one_page X-Git-Tag: v2.6.19-rc1~1167 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=006d22d9bbb7e66279ba5cc4556b54eeaf8fd556;p=linux-2.6 [PATCH] Optimize free_one_page Free one_page currently adds the page to a fake list and calls free_page_bulk. Fee_page_bulk takes it off again and then calles __free_one_page. Make free_one_page go directly to __free_one_page. Saves list on / off and a temporary list in free_one_page for higher ordered pages. Signed-off-by: Christoph Lameter Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/mm/page_alloc.c b/mm/page_alloc.c index e8a71657ac..cc64830475 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -448,9 +448,11 @@ static void free_pages_bulk(struct zone *zone, int count, static void free_one_page(struct zone *zone, struct page *page, int order) { - LIST_HEAD(list); - list_add(&page->lru, &list); - free_pages_bulk(zone, 1, &list, order); + spin_lock(&zone->lock); + zone->all_unreclaimable = 0; + zone->pages_scanned = 0; + __free_one_page(page, zone ,order); + spin_unlock(&zone->lock); } static void __free_pages_ok(struct page *page, unsigned int order)