]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mm: simplify and improve print_vma_addr() output
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 7 Apr 2024 20:18:39 +0000 (13:18 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 22 May 2024 21:37:23 +0000 (14:37 -0700)
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>
mm/memory.c

index b5453b86ec4b7ecce51141284f1f94ecc321b0b2..0f47a533014e43efd053a7d8301615eda35d881b 100644 (file)
@@ -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);
 }