xfs: trace xfs_name strings correctly
authorChristoph Hellwig <hch@infradead.org>
Tue, 28 Feb 2012 11:01:40 +0000 (11:01 +0000)
committerBen Myers <bpm@sgi.com>
Mon, 26 Mar 2012 18:58:48 +0000 (13:58 -0500)
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>
fs/xfs/xfs_trace.h

index 75eb54af4d581e7f4cc9270f0abb1c72238195ac..afb028213dbd0e4ad96b8411626206353acac2f2 100644 (file)
@@ -627,16 +627,19 @@ DECLARE_EVENT_CLASS(xfs_namespace_class,
        TP_STRUCT__entry(
                __field(dev_t, dev)
                __field(xfs_ino_t, dp_ino)
+               __field(int, namelen)
                __dynamic_array(char, name, name->len)
        ),
        TP_fast_assign(
                __entry->dev = VFS_I(dp)->i_sb->s_dev;
                __entry->dp_ino = dp->i_ino;
+               __entry->namelen = 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),
                  __entry->dp_ino,
+                 __entry->namelen,
                  __get_str(name))
 )
 
@@ -658,6 +661,8 @@ TRACE_EVENT(xfs_rename,
                __field(dev_t, dev)
                __field(xfs_ino_t, src_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, target_name, target_name->len)
        ),
@@ -665,15 +670,20 @@ TRACE_EVENT(xfs_rename,
                __entry->dev = VFS_I(src_dp)->i_sb->s_dev;
                __entry->src_dp_ino = src_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(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"
-                 " src name %s target name %s",
+                 " src name %.*s target name %.*s",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
                  __entry->src_dp_ino,
                  __entry->target_dp_ino,
+                 __entry->src_namelen,
                  __get_str(src_name),
+                 __entry->target_namelen,
                  __get_str(target_name))
 )