|
@@ -882,7 +882,7 @@ retry_reserve:
|
|
|
*/
|
|
|
static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
|
|
unsigned long count, struct list_head *list,
|
|
|
- int migratetype)
|
|
|
+ int migratetype, int cold)
|
|
|
{
|
|
|
int i;
|
|
|
|
|
@@ -901,7 +901,10 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
|
|
* merge IO requests if the physical pages are ordered
|
|
|
* properly.
|
|
|
*/
|
|
|
- list_add(&page->lru, list);
|
|
|
+ if (likely(cold == 0))
|
|
|
+ list_add(&page->lru, list);
|
|
|
+ else
|
|
|
+ list_add_tail(&page->lru, list);
|
|
|
set_page_private(page, migratetype);
|
|
|
list = &page->lru;
|
|
|
}
|
|
@@ -1119,7 +1122,8 @@ again:
|
|
|
local_irq_save(flags);
|
|
|
if (!pcp->count) {
|
|
|
pcp->count = rmqueue_bulk(zone, 0,
|
|
|
- pcp->batch, &pcp->list, migratetype);
|
|
|
+ pcp->batch, &pcp->list,
|
|
|
+ migratetype, cold);
|
|
|
if (unlikely(!pcp->count))
|
|
|
goto failed;
|
|
|
}
|
|
@@ -1138,7 +1142,8 @@ again:
|
|
|
/* Allocate more to the pcp list if necessary */
|
|
|
if (unlikely(&page->lru == &pcp->list)) {
|
|
|
pcp->count += rmqueue_bulk(zone, 0,
|
|
|
- pcp->batch, &pcp->list, migratetype);
|
|
|
+ pcp->batch, &pcp->list,
|
|
|
+ migratetype, cold);
|
|
|
page = list_entry(pcp->list.next, struct page, lru);
|
|
|
}
|
|
|
|