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 <zab@versity.com>
This commit is contained in:
Zach Brown
2018-03-09 14:29:55 -08:00
committed by Zach Brown
parent 8ec5b7efe3
commit 2136a973ed
+7 -13
View File
@@ -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)
);