diff options
author | Sasha Levin <sasha.levin@oracle.com> | 2014-01-23 18:52:54 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-23 19:36:50 -0500 |
commit | 309381feaee564281c3d9e90fbca8963bb7428ad (patch) | |
tree | 7e9f990c0cffcb8c5fc90deb1c7eac445c5ada0e /mm/swap_state.c | |
parent | e3bba3c3c90cd434c1ccb9e5dc704a96baf9541c (diff) |
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>
Diffstat (limited to 'mm/swap_state.c')
-rw-r--r-- | mm/swap_state.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/mm/swap_state.c b/mm/swap_state.c index e6f15f8ca2af..98e85e9c2b2d 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c | |||
@@ -83,9 +83,9 @@ int __add_to_swap_cache(struct page *page, swp_entry_t entry) | |||
83 | int error; | 83 | int error; |
84 | struct address_space *address_space; | 84 | struct address_space *address_space; |
85 | 85 | ||
86 | VM_BUG_ON(!PageLocked(page)); | 86 | VM_BUG_ON_PAGE(!PageLocked(page), page); |
87 | VM_BUG_ON(PageSwapCache(page)); | 87 | VM_BUG_ON_PAGE(PageSwapCache(page), page); |
88 | VM_BUG_ON(!PageSwapBacked(page)); | 88 | VM_BUG_ON_PAGE(!PageSwapBacked(page), page); |
89 | 89 | ||
90 | page_cache_get(page); | 90 | page_cache_get(page); |
91 | SetPageSwapCache(page); | 91 | SetPageSwapCache(page); |
@@ -139,9 +139,9 @@ void __delete_from_swap_cache(struct page *page) | |||
139 | swp_entry_t entry; | 139 | swp_entry_t entry; |
140 | struct address_space *address_space; | 140 | struct address_space *address_space; |
141 | 141 | ||
142 | VM_BUG_ON(!PageLocked(page)); | 142 | VM_BUG_ON_PAGE(!PageLocked(page), page); |
143 | VM_BUG_ON(!PageSwapCache(page)); | 143 | VM_BUG_ON_PAGE(!PageSwapCache(page), page); |
144 | VM_BUG_ON(PageWriteback(page)); | 144 | VM_BUG_ON_PAGE(PageWriteback(page), page); |
145 | 145 | ||
146 | entry.val = page_private(page); | 146 | entry.val = page_private(page); |
147 | address_space = swap_address_space(entry); | 147 | address_space = swap_address_space(entry); |
@@ -165,8 +165,8 @@ int add_to_swap(struct page *page, struct list_head *list) | |||
165 | swp_entry_t entry; | 165 | swp_entry_t entry; |
166 | int err; | 166 | int err; |
167 | 167 | ||
168 | VM_BUG_ON(!PageLocked(page)); | 168 | VM_BUG_ON_PAGE(!PageLocked(page), page); |
169 | VM_BUG_ON(!PageUptodate(page)); | 169 | VM_BUG_ON_PAGE(!PageUptodate(page), page); |
170 | 170 | ||
171 | entry = get_swap_page(); | 171 | entry = get_swap_page(); |
172 | if (!entry.val) | 172 | if (!entry.val) |