mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
mm: simplify and improve print_vma_addr() output
Use '%pD' to print out the filename, and print out the actual offset within the file too, rather than just what the virtual address of the mapping is (which doesn't tell you anything about any mapping offsets). Also, use the exact vma_lookup() instead of find_vma() - the latter looks up any vma _after_ the address, which is of questionable value (yes, maybe you fell off the beginning, but you'd be more likely to fall off the end). Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
f8a6e48c6c
commit
de7e71ef8b
1 changed files with 6 additions and 13 deletions
19
mm/memory.c
19
mm/memory.c
|
@ -6210,21 +6210,14 @@ void print_vma_addr(char *prefix, unsigned long ip)
|
|||
if (!mmap_read_trylock(mm))
|
||||
return;
|
||||
|
||||
vma = find_vma(mm, ip);
|
||||
vma = vma_lookup(mm, ip);
|
||||
if (vma && vma->vm_file) {
|
||||
struct file *f = vma->vm_file;
|
||||
char *buf = (char *)__get_free_page(GFP_NOWAIT);
|
||||
if (buf) {
|
||||
char *p;
|
||||
|
||||
p = file_path(f, buf, PAGE_SIZE);
|
||||
if (IS_ERR(p))
|
||||
p = "?";
|
||||
printk("%s%s[%lx+%lx]", prefix, kbasename(p),
|
||||
vma->vm_start,
|
||||
vma->vm_end - vma->vm_start);
|
||||
free_page((unsigned long)buf);
|
||||
}
|
||||
ip -= vma->vm_start;
|
||||
ip += vma->vm_pgoff << PAGE_SHIFT;
|
||||
printk("%s%pD[%lx,%lx+%lx]", prefix, f, ip,
|
||||
vma->vm_start,
|
||||
vma->vm_end - vma->vm_start);
|
||||
}
|
||||
mmap_read_unlock(mm);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue