Re: [f2fs-dev] [PATCH] f2fs: fix the assign logic of iocb

2022-10-23 Thread Google
On Fri, 21 Oct 2022 10:30:46 +0530
Pavan Kondeti  wrote:

> Hi Mukesh,
> 
> On Wed, Oct 19, 2022 at 09:47:57PM +0530, Mukesh Ojha wrote:
> > commit 18ae8d12991b ("f2fs: show more DIO information in tracepoint")
> > introduces iocb field in 'f2fs_direct_IO_enter' trace event
> > And it only assigns the pointer and later it accesses its field
> > in trace print log.
> > 
> > Fix it by correcting data type and memcpy the content of iocb.
> > 
> > Fixes: 18ae8d12991b ("f2fs: show more DIO information in tracepoint")
> > Signed-off-by: Mukesh Ojha 
> > ---
> >  include/trace/events/f2fs.h | 10 +-
> >  1 file changed, 5 insertions(+), 5 deletions(-)
> > 
> > diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
> > index c6b3724..7727ec9 100644
> > --- a/include/trace/events/f2fs.h
> > +++ b/include/trace/events/f2fs.h
> > @@ -940,7 +940,7 @@ TRACE_EVENT(f2fs_direct_IO_enter,
> > TP_STRUCT__entry(
> > __field(dev_t,  dev)
> > __field(ino_t,  ino)
> > -   __field(struct kiocb *, iocb)
> > +   __field_struct(struct kiocb,iocb)
> > __field(unsigned long,  len)
> > __field(int,rw)
> > ),
> > @@ -948,17 +948,17 @@ TRACE_EVENT(f2fs_direct_IO_enter,
> > TP_fast_assign(
> > __entry->dev= inode->i_sb->s_dev;
> > __entry->ino= inode->i_ino;
> > -   __entry->iocb   = iocb;
> > +memcpy(&__entry->iocb, iocb, sizeof(*iocb));
> > __entry->len= len;
> > __entry->rw = rw;
> > ),
> >  
> 
> Why copy the whole structure (48 bytes)? cache the three members you
> need.

+1. If this only prints ki_pos, ki_flags and ki_ioprio, I recommend you
to save those 3 fields to the entry. It should not expose in-kernel
data structure because it can be changed.

Thank you,

> 
> Thanks,
> Pavan


-- 
Masami Hiramatsu (Google) 


___
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel


Re: [f2fs-dev] [PATCH] f2fs: fix the assign logic of iocb

2022-10-20 Thread Pavan Kondeti
Hi Mukesh,

On Wed, Oct 19, 2022 at 09:47:57PM +0530, Mukesh Ojha wrote:
> commit 18ae8d12991b ("f2fs: show more DIO information in tracepoint")
> introduces iocb field in 'f2fs_direct_IO_enter' trace event
> And it only assigns the pointer and later it accesses its field
> in trace print log.
> 
> Fix it by correcting data type and memcpy the content of iocb.
> 
> Fixes: 18ae8d12991b ("f2fs: show more DIO information in tracepoint")
> Signed-off-by: Mukesh Ojha 
> ---
>  include/trace/events/f2fs.h | 10 +-
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
> index c6b3724..7727ec9 100644
> --- a/include/trace/events/f2fs.h
> +++ b/include/trace/events/f2fs.h
> @@ -940,7 +940,7 @@ TRACE_EVENT(f2fs_direct_IO_enter,
>   TP_STRUCT__entry(
>   __field(dev_t,  dev)
>   __field(ino_t,  ino)
> - __field(struct kiocb *, iocb)
> + __field_struct(struct kiocb,iocb)
>   __field(unsigned long,  len)
>   __field(int,rw)
>   ),
> @@ -948,17 +948,17 @@ TRACE_EVENT(f2fs_direct_IO_enter,
>   TP_fast_assign(
>   __entry->dev= inode->i_sb->s_dev;
>   __entry->ino= inode->i_ino;
> - __entry->iocb   = iocb;
> +  memcpy(&__entry->iocb, iocb, sizeof(*iocb));
>   __entry->len= len;
>   __entry->rw = rw;
>   ),
>  

Why copy the whole structure (48 bytes)? cache the three members you
need.

Thanks,
Pavan


___
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel


Re: [f2fs-dev] [PATCH] f2fs: fix the assign logic of iocb

2022-10-20 Thread Chao Yu

On 2022/10/20 17:27, Mukesh Ojha wrote:

Hi,

On 10/20/2022 2:31 PM, Chao Yu wrote:

On 2022/10/20 0:17, Mukesh Ojha wrote:

commit 18ae8d12991b ("f2fs: show more DIO information in tracepoint")
introduces iocb field in 'f2fs_direct_IO_enter' trace event
And it only assigns the pointer and later it accesses its field
in trace print log.

Fix it by correcting data type and memcpy the content of iocb.


So the implementation below is wrong, right? since it just assign __entry->name
with dentry->d_name.name rather than copyiny entirely, so that, during printing


I think, yes.

About the patch, we were getting error as below on doing


Thanks for the explanation. :)

What do you think of adding below info into commit message? and fixing all
similar issues of include/trace/events/f2fs.h in one patch?

Thanks,



echo 51200 > /d/tracing/buffer_size_kb
echo 1 > /d/tracing/events/f2fs/f2fs_direct_IO_enter/enable
echo 1 > /d/tracing/tracing_on
cat /d/tracing/trace_pipe > ftrace.log

Run something which exercise this path.

Unable to handle kernel paging request at virtual address ffc04cef3d30
Mem abort info:
ESR = 0x9607
EC = 0x25: DABT (current EL), IL = 32 bits

  pc : trace_raw_output_f2fs_direct_IO_enter+0x54/0xa4
  lr : trace_raw_output_f2fs_direct_IO_enter+0x2c/0xa4
  sp : ffc0443cbbd0
  x29: ffc0443cbbf0 x28: ff8935b120d0 x27: ff8935b12108
  x26: ff8935b120f0 x25: ff8935b12100 x24: ff8935b110c0
  x23: ff8935b1 x22: ff88859a936c x21: ff88859a936c
  x20: ff8935b110c0 x19: ff8935b1 x18: ffc03b195060
  x17: ff8935b11e76 x16: 00cc x15: ffef855c4f2c
  x14: 0001 x13: 004e x12: ff00
  x11: ffef86c350d0 x10: 10c0 x9 : 0fe0002c
  x8 : ffc04cef3d28 x7 : 7f7f7f7f7f7f7f7f x6 : 0200
  x5 : ff8935b11e9a x4 : 6250 x3 : 0a00ff04
  x2 : 0002 x1 : ffef86a0a31f x0 : ff8935b1
  Call trace:
   trace_raw_output_f2fs_direct_IO_enter+0x54/0xa4
   print_trace_fmt+0x9c/0x138
   print_trace_line+0x154/0x254
   tracing_read_pipe+0x21c/0x380
   vfs_read+0x108/0x3ac
   ksys_read+0x7c/0xec
   __arm64_sys_read+0x20/0x30
   invoke_syscall+0x60/0x150
   el0_svc_common.llvm.1237943816091755067+0xb8/0xf8
   do_el0_svc+0x28/0xa0

-Mukesh



___
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel


Re: [f2fs-dev] [PATCH] f2fs: fix the assign logic of iocb

2022-10-20 Thread Mukesh Ojha

Hi,

On 10/20/2022 2:31 PM, Chao Yu wrote:

On 2022/10/20 0:17, Mukesh Ojha wrote:

commit 18ae8d12991b ("f2fs: show more DIO information in tracepoint")
introduces iocb field in 'f2fs_direct_IO_enter' trace event
And it only assigns the pointer and later it accesses its field
in trace print log.

Fix it by correcting data type and memcpy the content of iocb.


So the implementation below is wrong, right? since it just assign 
__entry->name
with dentry->d_name.name rather than copyiny entirely, so that, during 
printing


I think, yes.

About the patch, we were getting error as below on doing

echo 51200 > /d/tracing/buffer_size_kb
echo 1 > /d/tracing/events/f2fs/f2fs_direct_IO_enter/enable
echo 1 > /d/tracing/tracing_on
cat /d/tracing/trace_pipe > ftrace.log

Run something which exercise this path.

Unable to handle kernel paging request at virtual address ffc04cef3d30
Mem abort info:
ESR = 0x9607
EC = 0x25: DABT (current EL), IL = 32 bits

 pc : trace_raw_output_f2fs_direct_IO_enter+0x54/0xa4
 lr : trace_raw_output_f2fs_direct_IO_enter+0x2c/0xa4
 sp : ffc0443cbbd0
 x29: ffc0443cbbf0 x28: ff8935b120d0 x27: ff8935b12108
 x26: ff8935b120f0 x25: ff8935b12100 x24: ff8935b110c0
 x23: ff8935b1 x22: ff88859a936c x21: ff88859a936c
 x20: ff8935b110c0 x19: ff8935b1 x18: ffc03b195060
 x17: ff8935b11e76 x16: 00cc x15: ffef855c4f2c
 x14: 0001 x13: 004e x12: ff00
 x11: ffef86c350d0 x10: 10c0 x9 : 0fe0002c
 x8 : ffc04cef3d28 x7 : 7f7f7f7f7f7f7f7f x6 : 0200
 x5 : ff8935b11e9a x4 : 6250 x3 : 0a00ff04
 x2 : 0002 x1 : ffef86a0a31f x0 : ff8935b1
 Call trace:
  trace_raw_output_f2fs_direct_IO_enter+0x54/0xa4
  print_trace_fmt+0x9c/0x138
  print_trace_line+0x154/0x254
  tracing_read_pipe+0x21c/0x380
  vfs_read+0x108/0x3ac
  ksys_read+0x7c/0xec
  __arm64_sys_read+0x20/0x30
  invoke_syscall+0x60/0x150
  el0_svc_common.llvm.1237943816091755067+0xb8/0xf8
  do_el0_svc+0x28/0xa0

-Mukesh


___
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel


Re: [f2fs-dev] [PATCH] f2fs: fix the assign logic of iocb

2022-10-20 Thread Chao Yu

On 2022/10/20 0:17, Mukesh Ojha wrote:

commit 18ae8d12991b ("f2fs: show more DIO information in tracepoint")
introduces iocb field in 'f2fs_direct_IO_enter' trace event
And it only assigns the pointer and later it accesses its field
in trace print log.

Fix it by correcting data type and memcpy the content of iocb.


So the implementation below is wrong, right? since it just assign __entry->name
with dentry->d_name.name rather than copyiny entirely, so that, during printing
of tracepoint, __entry->name may be invalid.

TRACE_EVENT(f2fs_unlink_enter,

TP_PROTO(struct inode *dir, struct dentry *dentry),

TP_ARGS(dir, dentry),

TP_STRUCT__entry(
__field(dev_t,  dev)
__field(ino_t,  ino)
__field(loff_t, size)
__field(blkcnt_t, blocks)
__field(const char *,   name)
),

TP_fast_assign(
__entry->dev = dir->i_sb->s_dev;
__entry->ino = dir->i_ino;
__entry->size= dir->i_size;
__entry->blocks  = dir->i_blocks;
__entry->name= dentry->d_name.name;
),



Fixes: 18ae8d12991b ("f2fs: show more DIO information in tracepoint")
Signed-off-by: Mukesh Ojha 
---
  include/trace/events/f2fs.h | 10 +-
  1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
index c6b3724..7727ec9 100644
--- a/include/trace/events/f2fs.h
+++ b/include/trace/events/f2fs.h
@@ -940,7 +940,7 @@ TRACE_EVENT(f2fs_direct_IO_enter,
TP_STRUCT__entry(
__field(dev_t,  dev)
__field(ino_t,  ino)
-   __field(struct kiocb *, iocb)
+   __field_struct(struct kiocb,iocb)
__field(unsigned long,  len)
__field(int,rw)
),
@@ -948,17 +948,17 @@ TRACE_EVENT(f2fs_direct_IO_enter,
TP_fast_assign(
__entry->dev = inode->i_sb->s_dev;
__entry->ino = inode->i_ino;
-   __entry->iocb= iocb;
+memcpy(&__entry->iocb, iocb, sizeof(*iocb));
__entry->len = len;
__entry->rw  = rw;
),
  
  	TP_printk("dev = (%d,%d), ino = %lu pos = %lld len = %lu ki_flags = %x ki_ioprio = %x rw = %d",

show_dev_ino(__entry),
-   __entry->iocb->ki_pos,
+   __entry->iocb.ki_pos,
__entry->len,
-   __entry->iocb->ki_flags,
-   __entry->iocb->ki_ioprio,
+   __entry->iocb.ki_flags,
+   __entry->iocb.ki_ioprio,
__entry->rw)
  );
  



___
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel