xfs
[Top] [All Lists]

[PATCH] xfs: fix xfs_fsblock_t tracing

To: xfs@xxxxxxxxxxx
Subject: [PATCH] xfs: fix xfs_fsblock_t tracing
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Mon, 15 Feb 2010 17:02:19 -0500
User-agent: Mutt/1.5.19 (2009-01-05)
Using a static buffer in xfs_fmtfsblock means we can corrupt traces if
multiple CPUs hit this code path at the same.  Just remove xfs_fmtfsblock
for now and print the block number purely numerical.  If we want the
NULLFSBLOCK and NULLSTARTBLOCK formatting back the best way would be
a decoding plugin in the trace-cmd userspace command.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Index: xfs/fs/xfs/linux-2.6/xfs_trace.c
===================================================================
--- xfs.orig/fs/xfs/linux-2.6/xfs_trace.c       2010-02-15 16:38:56.584022819 
+0100
+++ xfs/fs/xfs/linux-2.6/xfs_trace.c    2010-02-15 22:57:41.336004102 +0100
@@ -52,22 +52,6 @@
 #include "quota/xfs_dquot.h"
 
 /*
- * Format fsblock number into a static buffer & return it.
- */
-STATIC char *xfs_fmtfsblock(xfs_fsblock_t bno)
-{
-       static char rval[50];
-
-       if (bno == NULLFSBLOCK)
-               sprintf(rval, "NULLFSBLOCK");
-       else if (isnullstartblock(bno))
-               sprintf(rval, "NULLSTARTBLOCK(%lld)", startblockval(bno));
-       else
-               sprintf(rval, "%lld", (xfs_dfsbno_t)bno);
-       return rval;
-}
-
-/*
  * We include this last to have the helpers above available for the trace
  * event implementations.
  */
Index: xfs/fs/xfs/linux-2.6/xfs_trace.h
===================================================================
--- xfs.orig/fs/xfs/linux-2.6/xfs_trace.h       2010-02-15 16:38:56.595017231 
+0100
+++ xfs/fs/xfs/linux-2.6/xfs_trace.h    2010-02-15 22:57:41.338004172 +0100
@@ -197,13 +197,13 @@ TRACE_EVENT(xfs_iext_insert,
                __entry->caller_ip = caller_ip;
        ),
        TP_printk("dev %d:%d ino 0x%llx state %s idx %ld "
-                 "offset %lld block %s count %lld flag %d caller %pf",
+                 "offset %lld block %lld count %lld flag %d caller %pf",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
                  __entry->ino,
                  __print_flags(__entry->bmap_state, "|", XFS_BMAP_EXT_FLAGS),
                  (long)__entry->idx,
                  __entry->startoff,
-                 xfs_fmtfsblock(__entry->startblock),
+                 (__int64_t)__entry->startblock,
                  __entry->blockcount,
                  __entry->state,
                  (char *)__entry->caller_ip)
@@ -241,13 +241,13 @@ DECLARE_EVENT_CLASS(xfs_bmap_class,
                __entry->caller_ip = caller_ip;
        ),
        TP_printk("dev %d:%d ino 0x%llx state %s idx %ld "
-                 "offset %lld block %s count %lld flag %d caller %pf",
+                 "offset %lld block %lld count %lld flag %d caller %pf",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
                  __entry->ino,
                  __print_flags(__entry->bmap_state, "|", XFS_BMAP_EXT_FLAGS),
                  (long)__entry->idx,
                  __entry->startoff,
-                 xfs_fmtfsblock(__entry->startblock),
+                 (__int64_t)__entry->startblock,
                  __entry->blockcount,
                  __entry->state,
                  (char *)__entry->caller_ip)
@@ -881,7 +881,7 @@ TRACE_EVENT(name, \
        ), \
        TP_printk("dev %d:%d ino 0x%llx size 0x%llx new_size 0x%llx " \
                  "offset 0x%llx count %zd flags %s " \
-                 "startoff 0x%llx startblock %s blockcount 0x%llx", \
+                 "startoff 0x%llx startblock %lld blockcount 0x%llx", \
                  MAJOR(__entry->dev), MINOR(__entry->dev), \
                  __entry->ino, \
                  __entry->size, \
@@ -890,7 +890,7 @@ TRACE_EVENT(name, \
                  __entry->count, \
                  __print_flags(__entry->flags, "|", BMAPI_FLAGS), \
                  __entry->startoff, \
-                 xfs_fmtfsblock(__entry->startblock), \
+                 (__int64_t)__entry->startblock, \
                  __entry->blockcount) \
 )
 DEFINE_IOMAP_EVENT(xfs_iomap_enter);

<Prev in Thread] Current Thread [Next in Thread>