X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=mm%2Fswap.c;h=67a09a633a09baad606176f0899d94dbeb4d17d4;hb=4690dfa8cd66c37fbe99bb8cd5baa86102110776;hp=a91caf754d9badb5f0b1f3c54b8e86be4723ff84;hpb=e583685e998e52ebbf31fadf7d8470ae69951660;p=~andy%2Flinux diff --git a/mm/swap.c b/mm/swap.c index a91caf754d9..67a09a633a0 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -585,11 +585,10 @@ int lru_add_drain_all(void) void release_pages(struct page **pages, int nr, int cold) { int i; - struct pagevec pages_to_free; + LIST_HEAD(pages_to_free); struct zone *zone = NULL; unsigned long uninitialized_var(flags); - pagevec_init(&pages_to_free, cold); for (i = 0; i < nr; i++) { struct page *page = pages[i]; @@ -620,19 +619,12 @@ void release_pages(struct page **pages, int nr, int cold) del_page_from_lru(zone, page); } - if (!pagevec_add(&pages_to_free, page)) { - if (zone) { - spin_unlock_irqrestore(&zone->lru_lock, flags); - zone = NULL; - } - __pagevec_free(&pages_to_free); - pagevec_reinit(&pages_to_free); - } + list_add(&page->lru, &pages_to_free); } if (zone) spin_unlock_irqrestore(&zone->lru_lock, flags); - pagevec_free(&pages_to_free); + free_hot_cold_page_list(&pages_to_free, cold); } EXPORT_SYMBOL(release_pages);