|
@@ -847,8 +847,19 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
|
struct page *page = __rmqueue(zone, order, migratetype);
|
|
struct page *page = __rmqueue(zone, order, migratetype);
|
|
if (unlikely(page == NULL))
|
|
if (unlikely(page == NULL))
|
|
break;
|
|
break;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Split buddy pages returned by expand() are received here
|
|
|
|
+ * in physical page order. The page is added to the callers and
|
|
|
|
+ * list and the list head then moves forward. From the callers
|
|
|
|
+ * perspective, the linked list is ordered by page number in
|
|
|
|
+ * some conditions. This is useful for IO devices that can
|
|
|
|
+ * merge IO requests if the physical pages are ordered
|
|
|
|
+ * properly.
|
|
|
|
+ */
|
|
list_add(&page->lru, list);
|
|
list_add(&page->lru, list);
|
|
set_page_private(page, migratetype);
|
|
set_page_private(page, migratetype);
|
|
|
|
+ list = &page->lru;
|
|
}
|
|
}
|
|
spin_unlock(&zone->lock);
|
|
spin_unlock(&zone->lock);
|
|
return i;
|
|
return i;
|