xfs
[Top] [All Lists]

[PATCH-v2 4/5] vfs: add lazytime tracepoints for better debugging

To: linux-fsdevel@xxxxxxxxxxxxxxx
Subject: [PATCH-v2 4/5] vfs: add lazytime tracepoints for better debugging
From: Theodore Ts'o <tytso@xxxxxxx>
Date: Sat, 22 Nov 2014 11:54:26 -0500
Cc: Ext4 Developers List <linux-ext4@xxxxxxxxxxxxxxx>, xfs@xxxxxxxxxxx, linux-btrfs@xxxxxxxxxxxxxxx, Theodore Ts'o <tytso@xxxxxxx>
Delivered-to: xfs@xxxxxxxxxxx
Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=thunk.org; s=ef5046eb; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=eCbIGTttQhJzF2s0qMQbhiYbzYUJcahTbVClhtOTQro=; b=WxORGa9jJQlT8Cv9ZroZGvCkonJjEDQSN+5aDt9dZQKQ/zrEThL1gckhBsgJj3m0cets4KxY7UxDwy4CyDzKUvDB8A8/t9Da5vi4RB4yu2krS5axAPiNIptiRBudFp4sexvXxM649lcJR9TMWsmVblgXHezVhV0iZdvWYD9wc9U=;
In-reply-to: <1416675267-2191-1-git-send-email-tytso@xxxxxxx>
References: <1416675267-2191-1-git-send-email-tytso@xxxxxxx>
Signed-off-by: Theodore Ts'o <tytso@xxxxxxx>
---
 fs/fs-writeback.c         |  5 ++++-
 fs/inode.c                |  5 +++++
 include/trace/events/fs.h | 56 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 65 insertions(+), 1 deletion(-)
 create mode 100644 include/trace/events/fs.h

diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index eb04277..cab2d6d 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -27,6 +27,7 @@
 #include <linux/backing-dev.h>
 #include <linux/tracepoint.h>
 #include <linux/device.h>
+#include <trace/events/fs.h>
 #include "internal.h"
 
 /*
@@ -1304,8 +1305,10 @@ static void flush_sb_dirty_time(struct super_block *sb)
                iput(old_inode);
                old_inode = inode;
 
-               if (dirty_time)
+               if (dirty_time) {
+                       trace_fs_lazytime_flush(inode);
                        mark_inode_dirty(inode);
+               }
                cond_resched();
                spin_lock(&inode_sb_list_lock);
        }
diff --git a/fs/inode.c b/fs/inode.c
index 0d939a8..5a9a7b0 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -20,6 +20,9 @@
 #include <linux/list_lru.h>
 #include "internal.h"
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/fs.h>
+
 /*
  * Inode locking rules:
  *
@@ -544,6 +547,7 @@ static void evict(struct inode *inode)
                        mark_inode_dirty(inode);
                        inode->i_sb->s_op->write_inode(inode, &wbc);
                }
+               trace_fs_lazytime_evict(inode);
        }
 
        if (!list_empty(&inode->i_wb_list))
@@ -1546,6 +1550,7 @@ static int update_time(struct inode *inode, struct 
timespec *time, int flags)
                inode->i_state |= I_DIRTY_TIME;
                spin_unlock(&inode->i_lock);
                inode->i_ts_dirty_day = days_since_boot;
+               trace_fs_lazytime_defer(inode);
                return 0;
        }
        inode->i_ts_dirty_day = 0;
diff --git a/include/trace/events/fs.h b/include/trace/events/fs.h
new file mode 100644
index 0000000..ca06d5c
--- /dev/null
+++ b/include/trace/events/fs.h
@@ -0,0 +1,56 @@
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM fs
+
+#if !defined(_TRACE_FS_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_FS_H
+
+#include <linux/tracepoint.h>
+
+DECLARE_EVENT_CLASS(fs__inode,
+       TP_PROTO(struct inode *inode),
+
+       TP_ARGS(inode),
+
+       TP_STRUCT__entry(
+               __field(        dev_t,  dev                     )
+               __field(        ino_t,  ino                     )
+               __field(        uid_t,  uid                     )
+               __field(        gid_t,  gid                     )
+               __field(        __u16, mode                     )
+       ),
+
+       TP_fast_assign(
+               __entry->dev    = inode->i_sb->s_dev;
+               __entry->ino    = inode->i_ino;
+               __entry->uid    = i_uid_read(inode);
+               __entry->gid    = i_gid_read(inode);
+               __entry->mode   = inode->i_mode;
+       ),
+
+       TP_printk("dev %d,%d ino %lu mode 0%o uid %u gid %u",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 (unsigned long) __entry->ino, __entry->mode,
+                 __entry->uid, __entry->gid)
+);
+
+DEFINE_EVENT(fs__inode, fs_lazytime_defer,
+       TP_PROTO(struct inode *inode),
+
+       TP_ARGS(inode)
+);
+
+DEFINE_EVENT(fs__inode, fs_lazytime_evict,
+       TP_PROTO(struct inode *inode),
+
+       TP_ARGS(inode)
+);
+
+DEFINE_EVENT(fs__inode, fs_lazytime_flush,
+       TP_PROTO(struct inode *inode),
+
+       TP_ARGS(inode)
+);
+#endif /* _TRACE_FS_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
-- 
2.1.0

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