Re: [PATCH v2 2/4] lib/vsprintf.c: make '%pD' print the full path of file
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date: 2021-06-23 09:15:14
Also in:
linux-fsdevel, lkml
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date: 2021-06-23 09:15:14
Also in:
linux-fsdevel, lkml
On Wed, Jun 23, 2021 at 01:50:09PM +0800, Jia He wrote:
Previously, the specifier '%pD' is for printing dentry name of struct file. It may not be perfect (by default it only prints one component.) As suggested by Linus [1]:quoted
A dentry has a parent, but at the same time, a dentry really does inherently have "one name" (and given just the dentry pointers, you can't show mount-related parenthood, so in many ways the "show just one name" makes sense for "%pd" in ways it doesn't necessarily for "%pD"). But while a dentry arguably has that "one primary component", a _file_ is certainly not exclusively about that last component.Hence change the behavior of '%pD' to print the full path of that file. If someone invokes snprintf() with small but positive space, prepend_name_with_len() moves or truncates the string partially. More than that, kasprintf() will pass NULL @buf and @end as the parameters, and @end - @buf can be negative in some case. Hence make it return at the very beginning with false in these cases. Precision is never going to be used with %p (or any of its kernel extensions) if -Wformat is turned on.
...
+ char *p; + const struct path *path; + int prepend_len, widen_len, dpath_len;
Reversed xmas tree order? -- With Best Regards, Andy Shevchenko