mm/page_isolation: tracing: trace all test_pages_isolated failures
authorGeorge G. Davis <davis.george@siemens.com>
Thu, 2 Sep 2021 21:58:16 +0000 (14:58 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 3 Sep 2021 16:58:15 +0000 (09:58 -0700)
Some test_pages_isolated failure conditions don't include trace points.
For debugging issues caused by "pinned" pages, make sure to trace all
calls whether they succeed or fail.  In this case, a failure case did not
result in a trace point.  So add the missing failure case in
test_pages_isolated traces.

Link: https://lkml.kernel.org/r/20210823202823.13765-1-george_davis@mentor.com
Signed-off-by: George G. Davis <davis.george@siemens.com>
Cc: Eugeniu Rosca <erosca@de.adit-jv.com>
Cc: David Hildenbrand <david@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/page_isolation.c

index bddf788..fff55bb 100644 (file)
@@ -287,6 +287,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 +300,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;
 }