Merge branch 'misc.namei' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux-2.6-microblaze.git] / mm / page_isolation.c
index bddf788..a95c2c6 100644 (file)
@@ -93,8 +93,7 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype)
                        buddy_pfn = __find_buddy_pfn(pfn, order);
                        buddy = page + (buddy_pfn - pfn);
 
-                       if (pfn_valid_within(buddy_pfn) &&
-                           !is_migrate_isolate_page(buddy)) {
+                       if (!is_migrate_isolate_page(buddy)) {
                                __isolate_free_page(page, order);
                                isolated_page = true;
                        }
@@ -250,10 +249,6 @@ __test_page_isolated_in_pageblock(unsigned long pfn, unsigned long end_pfn,
        struct page *page;
 
        while (pfn < end_pfn) {
-               if (!pfn_valid_within(pfn)) {
-                       pfn++;
-                       continue;
-               }
                page = pfn_to_page(pfn);
                if (PageBuddy(page))
                        /*
@@ -287,6 +282,7 @@ int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn,
        unsigned long pfn, flags;
        struct page *page;
        struct zone *zone;
+       int ret;
 
        /*
         * Note: pageblock_nr_pages != MAX_ORDER. Then, chunks of free pages
@@ -299,15 +295,21 @@ int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn,
                        break;
        }
        page = __first_valid_page(start_pfn, end_pfn - start_pfn);
-       if ((pfn < end_pfn) || !page)
-               return -EBUSY;
+       if ((pfn < end_pfn) || !page) {
+               ret = -EBUSY;
+               goto out;
+       }
+
        /* Check all pages are free or marked as ISOLATED */
        zone = page_zone(page);
        spin_lock_irqsave(&zone->lock, flags);
        pfn = __test_page_isolated_in_pageblock(start_pfn, end_pfn, isol_flags);
        spin_unlock_irqrestore(&zone->lock, flags);
 
+       ret = pfn < end_pfn ? -EBUSY : 0;
+
+out:
        trace_test_pages_isolated(start_pfn, end_pfn, pfn);
 
-       return pfn < end_pfn ? -EBUSY : 0;
+       return ret;
 }