Messages in this thread | | | Subject | Re: [PATCH 06/14] md/bcache: Use %pS printk format for direct addresses | From | Helge Deller <> | Date | Thu, 7 Sep 2017 09:42:38 +0200 |
| |
On 07.09.2017 06:50, Coly Li wrote: > On 2017/9/7 上午4:27, Helge Deller wrote: >> Use the %pS instead of the %pF printk format specifier for printing symbols >> from direct addresses. This is needed for the ia64, ppc64 and parisc64 >> architectures. >> >> Signed-off-by: Helge Deller <deller@gmx.de> >> Cc: linux-bcache@vger.kernel.org >> Cc: linux-raid@vger.kernel.org >> --- >> drivers/md/bcache/closure.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/md/bcache/closure.c b/drivers/md/bcache/closure.c >> index 864e673..0b0c9bc 100644 >> --- a/drivers/md/bcache/closure.c >> +++ b/drivers/md/bcache/closure.c >> @@ -175,7 +175,7 @@ static int debug_seq_show(struct seq_file *f, void *data) >> list_for_each_entry(cl, &closure_list, all) { >> int r = atomic_read(&cl->remaining); >> >> - seq_printf(f, "%p: %pF -> %pf p %p r %i ", >> + seq_printf(f, "%p: %pS -> %pf p %p r %i ", >> cl, (void *) cl->ip, cl->fn, cl->parent, >> r & CLOSURE_REMAINING_MASK); >> >> @@ -187,7 +187,7 @@ static int debug_seq_show(struct seq_file *f, void *data) >> r & CLOSURE_SLEEPING ? "Sl" : ""); >> >> if (r & CLOSURE_WAITING) >> - seq_printf(f, " W %pF\n", >> + seq_printf(f, " W %pS\n", >> (void *) cl->waiting_on); >> >> seq_printf(f, "\n"); >> > > It is unclear to me, that if %pF is used, on ia64/ppc64/parisc64 a > function descriptor conversion happens, what negative effect exactly > takes place ?
On ia64/ppc64/parisc64 the kernel will crash here in the worst case, because vsprintf() will try to read a pointer from that address and resolve it. But you hand over a return address (_RET_IP_) which should be resolved directly to a symbol. For that you need to use the %pS specifier, which is what my patch does.
The patch has no negative effect on any platform. Output will still be the same on x86/mips/arm/... as it has been before with %pF. The only positive effect of the patch is that the seq_printf will now show correct output on ia64/ppc64/parisc64 too.
Helge
| |