[PATCH] revert mm: compaction: iron out isolate_freepages_block()and isolate_freepages_range()

From: Minchan Kim
Date: Fri Sep 28 2012 - 01:28:32 EST


[1] made bug on CMA.
The nr_scanned should be never equal to total_isolated for successful CMA.
This patch reverts part of the patch.

[1] mm: compaction: iron out isolate_freepages_block() and isolate_freepages_range()

Cc: Mel Gorman <mgorman@xxxxxxx>
Signed-off-by: Minchan Kim <minchan@xxxxxxxxxx>
---
mm/compaction.c | 29 ++++++++++++++++-------------
1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/mm/compaction.c b/mm/compaction.c
index 5037399..7721197 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -269,13 +269,14 @@ static unsigned long isolate_freepages_block(struct compact_control *cc,
int isolated, i;
struct page *page = cursor;

- nr_scanned++;
if (!pfn_valid_within(blockpfn))
- continue;
+ goto strict_check;
+ nr_scanned++;
+
if (!valid_page)
valid_page = page;
if (!PageBuddy(page))
- continue;
+ goto strict_check;

/*
* The zone lock must be held to isolate freepages.
@@ -296,12 +297,12 @@ static unsigned long isolate_freepages_block(struct compact_control *cc,

/* Recheck this is a buddy page under lock */
if (!PageBuddy(page))
- continue;
+ goto strict_check;

/* Found a free page, break it into order-0 pages */
isolated = split_free_page(page);
if (!isolated && strict)
- break;
+ goto strict_check;
total_isolated += isolated;
for (i = 0; i < isolated; i++) {
list_add(&page->lru, freelist);
@@ -313,18 +314,20 @@ static unsigned long isolate_freepages_block(struct compact_control *cc,
blockpfn += isolated - 1;
cursor += isolated - 1;
}
+
+ continue;
+
+strict_check:
+ /* Abort isolation if the caller requested strict isolation */
+ if (strict) {
+ total_isolated = 0;
+ goto out;
+ }
}

trace_mm_compaction_isolate_freepages(nr_scanned, total_isolated);

- /*
- * If strict isolation is requested by CMA then check that all the
- * pages scanned were isolated. If there were any failures, 0 is
- * returned and CMA will fail.
- */
- if (strict && nr_scanned != total_isolated)
- total_isolated = 0;
-
+out:
if (locked)
spin_unlock_irqrestore(&cc->zone->lock, flags);

--
1.7.9.5



>
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@xxxxxxxxxx For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>

--
Kind regards,
Minchan Kim
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/