|
@@ -3388,25 +3388,33 @@ static void setup_zone_migrate_reserve(struct zone *zone)
|
|
|
if (page_to_nid(page) != zone_to_nid(zone))
|
|
|
continue;
|
|
|
|
|
|
- /* Blocks with reserved pages will never free, skip them. */
|
|
|
- block_end_pfn = min(pfn + pageblock_nr_pages, end_pfn);
|
|
|
- if (pageblock_is_reserved(pfn, block_end_pfn))
|
|
|
- continue;
|
|
|
-
|
|
|
block_migratetype = get_pageblock_migratetype(page);
|
|
|
|
|
|
- /* If this block is reserved, account for it */
|
|
|
- if (reserve > 0 && block_migratetype == MIGRATE_RESERVE) {
|
|
|
- reserve--;
|
|
|
- continue;
|
|
|
- }
|
|
|
+ /* Only test what is necessary when the reserves are not met */
|
|
|
+ if (reserve > 0) {
|
|
|
+ /*
|
|
|
+ * Blocks with reserved pages will never free, skip
|
|
|
+ * them.
|
|
|
+ */
|
|
|
+ block_end_pfn = min(pfn + pageblock_nr_pages, end_pfn);
|
|
|
+ if (pageblock_is_reserved(pfn, block_end_pfn))
|
|
|
+ continue;
|
|
|
|
|
|
- /* Suitable for reserving if this block is movable */
|
|
|
- if (reserve > 0 && block_migratetype == MIGRATE_MOVABLE) {
|
|
|
- set_pageblock_migratetype(page, MIGRATE_RESERVE);
|
|
|
- move_freepages_block(zone, page, MIGRATE_RESERVE);
|
|
|
- reserve--;
|
|
|
- continue;
|
|
|
+ /* If this block is reserved, account for it */
|
|
|
+ if (block_migratetype == MIGRATE_RESERVE) {
|
|
|
+ reserve--;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Suitable for reserving if this block is movable */
|
|
|
+ if (block_migratetype == MIGRATE_MOVABLE) {
|
|
|
+ set_pageblock_migratetype(page,
|
|
|
+ MIGRATE_RESERVE);
|
|
|
+ move_freepages_block(zone, page,
|
|
|
+ MIGRATE_RESERVE);
|
|
|
+ reserve--;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/*
|