xfs
[Top] [All Lists]

[PATCH] xfs: trace xfs_name strings correctly

To: xfs@xxxxxxxxxxx
Subject: [PATCH] xfs: trace xfs_name strings correctly
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Tue, 28 Feb 2012 06:01:40 -0500
User-agent: Mutt/1.5.21 (2010-09-15)
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@xxxxxxxxx>
Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Index: xfs/fs/xfs/xfs_trace.h
===================================================================
--- xfs.orig/fs/xfs/xfs_trace.h 2012-02-02 13:11:38.355063111 +0100
+++ xfs/fs/xfs/xfs_trace.h      2012-02-02 14:58:45.800242652 +0100
@@ -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))
 )
 

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] xfs: trace xfs_name strings correctly, Christoph Hellwig <=