mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 23:27:06 +00:00
xfs: trace xfs_name strings correctly
Strings store in an xfs_name structure are often not NUL terminated, print them using the correct printf specifiers that make use of the string length store in the xfs_name structure. Reported-by: Brian Candler <B.Candler@pobox.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
c999a223c2
commit
f616137519
1 changed files with 13 additions and 3 deletions
|
@ -627,16 +627,19 @@ DECLARE_EVENT_CLASS(xfs_namespace_class,
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(dev_t, dev)
|
__field(dev_t, dev)
|
||||||
__field(xfs_ino_t, dp_ino)
|
__field(xfs_ino_t, dp_ino)
|
||||||
|
__field(int, namelen)
|
||||||
__dynamic_array(char, name, name->len)
|
__dynamic_array(char, name, name->len)
|
||||||
),
|
),
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = VFS_I(dp)->i_sb->s_dev;
|
__entry->dev = VFS_I(dp)->i_sb->s_dev;
|
||||||
__entry->dp_ino = dp->i_ino;
|
__entry->dp_ino = dp->i_ino;
|
||||||
|
__entry->namelen = name->len;
|
||||||
memcpy(__get_str(name), name->name, name->len);
|
memcpy(__get_str(name), name->name, name->len);
|
||||||
),
|
),
|
||||||
TP_printk("dev %d:%d dp ino 0x%llx name %s",
|
TP_printk("dev %d:%d dp ino 0x%llx name %.*s",
|
||||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||||
__entry->dp_ino,
|
__entry->dp_ino,
|
||||||
|
__entry->namelen,
|
||||||
__get_str(name))
|
__get_str(name))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -658,6 +661,8 @@ TRACE_EVENT(xfs_rename,
|
||||||
__field(dev_t, dev)
|
__field(dev_t, dev)
|
||||||
__field(xfs_ino_t, src_dp_ino)
|
__field(xfs_ino_t, src_dp_ino)
|
||||||
__field(xfs_ino_t, target_dp_ino)
|
__field(xfs_ino_t, target_dp_ino)
|
||||||
|
__field(int, src_namelen)
|
||||||
|
__field(int, target_namelen)
|
||||||
__dynamic_array(char, src_name, src_name->len)
|
__dynamic_array(char, src_name, src_name->len)
|
||||||
__dynamic_array(char, target_name, target_name->len)
|
__dynamic_array(char, target_name, target_name->len)
|
||||||
),
|
),
|
||||||
|
@ -665,15 +670,20 @@ TRACE_EVENT(xfs_rename,
|
||||||
__entry->dev = VFS_I(src_dp)->i_sb->s_dev;
|
__entry->dev = VFS_I(src_dp)->i_sb->s_dev;
|
||||||
__entry->src_dp_ino = src_dp->i_ino;
|
__entry->src_dp_ino = src_dp->i_ino;
|
||||||
__entry->target_dp_ino = target_dp->i_ino;
|
__entry->target_dp_ino = target_dp->i_ino;
|
||||||
|
__entry->src_namelen = src_name->len;
|
||||||
|
__entry->target_namelen = target_name->len;
|
||||||
memcpy(__get_str(src_name), src_name->name, src_name->len);
|
memcpy(__get_str(src_name), src_name->name, src_name->len);
|
||||||
memcpy(__get_str(target_name), target_name->name, target_name->len);
|
memcpy(__get_str(target_name), target_name->name,
|
||||||
|
target_name->len);
|
||||||
),
|
),
|
||||||
TP_printk("dev %d:%d src dp ino 0x%llx target dp ino 0x%llx"
|
TP_printk("dev %d:%d src dp ino 0x%llx target dp ino 0x%llx"
|
||||||
" src name %s target name %s",
|
" src name %.*s target name %.*s",
|
||||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||||
__entry->src_dp_ino,
|
__entry->src_dp_ino,
|
||||||
__entry->target_dp_ino,
|
__entry->target_dp_ino,
|
||||||
|
__entry->src_namelen,
|
||||||
__get_str(src_name),
|
__get_str(src_name),
|
||||||
|
__entry->target_namelen,
|
||||||
__get_str(target_name))
|
__get_str(target_name))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue