From 2136a973ed0a441f02a0ab96803078377664e3ee Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Wed, 7 Mar 2018 15:49:46 -0800 Subject: [PATCH] scoutfs: copy names in rename trace event The rename trace event was recording and later dereferencing pointers to dentry names that could be long gone by the time the output is generated. We need to copy the name strings into the trace buffers. Signed-off-by: Zach Brown --- kmod/src/scoutfs_trace.h | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/kmod/src/scoutfs_trace.h b/kmod/src/scoutfs_trace.h index 5b2e930d..58293a52 100644 --- a/kmod/src/scoutfs_trace.h +++ b/kmod/src/scoutfs_trace.h @@ -1865,31 +1865,25 @@ TRACE_EVENT(scoutfs_rename, TP_STRUCT__entry( __field(__u64, fsid) __field(__u64, old_dir_ino) - __field(char *, old_name) - __field(unsigned int, old_name_len) + __string(old_name, old_dentry->d_name.name) __field(__u64, new_dir_ino) - __field(char *, new_name) - __field(unsigned int, new_name_len) + __string(new_name, new_dentry->d_name.name) __field(__u64, new_inode_ino) ), TP_fast_assign( __entry->fsid = FSID_ARG(sb); __entry->old_dir_ino = scoutfs_ino(old_dir); - __entry->old_name = (char *)old_dentry->d_name.name; - __entry->old_name_len = old_dentry->d_name.len; + __assign_str(old_name, old_dentry->d_name.name) __entry->new_dir_ino = scoutfs_ino(new_dir); - __entry->new_name = (char *)new_dentry->d_name.name; - __entry->new_name_len = new_dentry->d_name.len; + __assign_str(new_name, new_dentry->d_name.name) __entry->new_inode_ino = new_dentry->d_inode ? scoutfs_ino(new_dentry->d_inode) : 0; ), - TP_printk("fsid "FSID_FMT" old_dir_ino %llu old_name %.*s (len %u) new_dir_ino %llu new_name %.*s (len %u) new_inode_ino %llu", - __entry->fsid, __entry->old_dir_ino, __entry->old_name_len, - __entry->old_name, __entry->old_name_len, - __entry->new_dir_ino, __entry->new_name_len, - __entry->new_name, __entry->new_name_len, + TP_printk("fsid "FSID_FMT" old_dir_ino %llu old_name %s new_dir_ino %llu new_name %s new_inode_ino %llu", + __entry->fsid, __entry->old_dir_ino, __get_str(old_name), + __entry->new_dir_ino, __get_str(new_name), __entry->new_inode_ino) );