Messages in this thread | | | Date | Thu, 20 Oct 2022 17:01:16 +0800 | Subject | Re: [PATCH] f2fs: fix the assign logic of iocb | From | 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 <quic_mojha@quicinc.com> > --- > 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) > ); >
| |