mm: dump page when hitting a VM_BUG_ON using VM_BUG_ON_PAGE
Most of the VM_BUG_ON assertions are performed on a page. Usually, when one of these assertions fails we'll get a BUG_ON with a call stack and the registers. I've recently noticed based on the requests to add a small piece of code that dumps the page to various VM_BUG_ON sites that the page dump is quite useful to people debugging issues in mm. This patch adds a VM_BUG_ON_PAGE(cond, page) which beyond doing what VM_BUG_ON() does, also dumps the page before executing the actual BUG_ON. [akpm@linux-foundation.org: fix up includes] Signed-off-by: Sasha Levin <sasha.levin@oracle.com> Cc: "Kirill A. Shutemov" <kirill@shutemov.name> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e3bba3c3c9
commit
309381feae
30 changed files with 181 additions and 170 deletions
10
mm/rmap.c
10
mm/rmap.c
|
@ -894,9 +894,9 @@ void page_move_anon_rmap(struct page *page,
|
|||
{
|
||||
struct anon_vma *anon_vma = vma->anon_vma;
|
||||
|
||||
VM_BUG_ON(!PageLocked(page));
|
||||
VM_BUG_ON_PAGE(!PageLocked(page), page);
|
||||
VM_BUG_ON(!anon_vma);
|
||||
VM_BUG_ON(page->index != linear_page_index(vma, address));
|
||||
VM_BUG_ON_PAGE(page->index != linear_page_index(vma, address), page);
|
||||
|
||||
anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
|
||||
page->mapping = (struct address_space *) anon_vma;
|
||||
|
@ -995,7 +995,7 @@ void do_page_add_anon_rmap(struct page *page,
|
|||
if (unlikely(PageKsm(page)))
|
||||
return;
|
||||
|
||||
VM_BUG_ON(!PageLocked(page));
|
||||
VM_BUG_ON_PAGE(!PageLocked(page), page);
|
||||
/* address might be in next vma when migration races vma_adjust */
|
||||
if (first)
|
||||
__page_set_anon_rmap(page, vma, address, exclusive);
|
||||
|
@ -1481,7 +1481,7 @@ int try_to_unmap(struct page *page, enum ttu_flags flags)
|
|||
.anon_lock = page_lock_anon_vma_read,
|
||||
};
|
||||
|
||||
VM_BUG_ON(!PageHuge(page) && PageTransHuge(page));
|
||||
VM_BUG_ON_PAGE(!PageHuge(page) && PageTransHuge(page), page);
|
||||
|
||||
/*
|
||||
* During exec, a temporary VMA is setup and later moved.
|
||||
|
@ -1533,7 +1533,7 @@ int try_to_munlock(struct page *page)
|
|||
|
||||
};
|
||||
|
||||
VM_BUG_ON(!PageLocked(page) || PageLRU(page));
|
||||
VM_BUG_ON_PAGE(!PageLocked(page) || PageLRU(page), page);
|
||||
|
||||
ret = rmap_walk(page, &rwc);
|
||||
return ret;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue