mm/memory: also print a_ops->readpage in print_bad_pte()
A lot of filesystems use generic_file_mmap() and filemap_fault(), f_op->mmap and vm_ops->fault aren't enough to identify filesystem. This prints file name, vm_ops->fault, f_op->mmap and a_ops->readpage (which is almost always implemented and filesystem-specific). Example: [ 23.676410] BUG: Bad page map in process sh pte:1b7e6025 pmd:19bbd067 [ 23.676887] page:ffffea00006df980 count:4 mapcount:1 mapping:ffff8800196426c0 index:0x97 [ 23.677481] flags: 0x10000000000000c(referenced|uptodate) [ 23.677896] page dumped because: bad pte [ 23.678205] addr:00007f52fcb17000 vm_flags:00000075 anon_vma: (null) mapping:ffff8800196426c0 index:97 [ 23.678922] file:libc-2.19.so fault:filemap_fault mmap:generic_file_readonly_mmap readpage:v9fs_vfs_readpage [akpm@linux-foundation.org: use pr_alert, per Kirill] Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> Cc: Sasha Levin <sasha.levin@oracle.com> Acked-by: 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
923936157b
commit
2682582a6e
11
mm/memory.c
11
mm/memory.c
|
@ -690,12 +690,11 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr,
|
|||
/*
|
||||
* Choose text because data symbols depend on CONFIG_KALLSYMS_ALL=y
|
||||
*/
|
||||
if (vma->vm_ops)
|
||||
printk(KERN_ALERT "vma->vm_ops->fault: %pSR\n",
|
||||
vma->vm_ops->fault);
|
||||
if (vma->vm_file)
|
||||
printk(KERN_ALERT "vma->vm_file->f_op->mmap: %pSR\n",
|
||||
vma->vm_file->f_op->mmap);
|
||||
pr_alert("file:%pD fault:%pf mmap:%pf readpage:%pf\n",
|
||||
vma->vm_file,
|
||||
vma->vm_ops ? vma->vm_ops->fault : NULL,
|
||||
vma->vm_file ? vma->vm_file->f_op->mmap : NULL,
|
||||
mapping ? mapping->a_ops->readpage : NULL);
|
||||
dump_stack();
|
||||
add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue