On Tue, Mar 7, 2017 at 10:40 AM, Tony Luck <tony.luck@xxxxxxxxx> wrote: > The commit messages talks about the "only caller" of page_is_buddy(). > But grep shows two call sites: > > mm/page_alloc.c:816: if (!page_is_buddy(page, buddy, order)) > mm/page_alloc.c:876: if (page_is_buddy(higher_page, and it looks like the second one is the problem: if ((order < MAX_ORDER-2) && pfn_valid_within(buddy_pfn)) { struct page *higher_page, *higher_buddy; combined_pfn = buddy_pfn & pfn; higher_page = page + (combined_pfn - pfn); buddy_pfn = __find_buddy_pfn(combined_pfn, order + 1); higher_buddy = higher_page + (buddy_pfn - combined_pfn); if (page_is_buddy(higher_page, higher_buddy, order + 1)) { list_add_tail(&page->lru, &zone->free_area[order].free_list[migratetype]); goto out; } } Although outer "if" checked for pfn_valid_within(buddy_pfn), we actually pass "higher_buddy" to this call of page_is_buddy(). -Tony -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>