ext4: Add debugging markers that can be used by systemtap
authorTheodore Ts'o <tytso@mit.edu>
Mon, 6 Oct 2008 00:50:06 +0000 (20:50 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 6 Oct 2008 00:50:06 +0000 (20:50 -0400)
This debugging markers are designed to debug problems such as the
random filesystem latency problems reported by Arjan.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/fsync.c
fs/ext4/super.c
fs/jbd2/checkpoint.c
fs/jbd2/commit.c

index c37d1e86f51a6d63cda9f2043156a12d2e2c15e9..5afe4370840b2b0b7c683a7d738baf648eae533b 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/writeback.h>
 #include <linux/jbd2.h>
 #include <linux/blkdev.h>
+#include <linux/marker.h>
 #include "ext4.h"
 #include "ext4_jbd2.h"
 
@@ -51,6 +52,10 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)
 
        J_ASSERT(ext4_journal_current_handle() == NULL);
 
+       trace_mark(ext4_sync_file, "dev %s datasync %d ino %ld parent %ld",
+                  inode->i_sb->s_id, datasync, inode->i_ino,
+                  dentry->d_parent->d_inode->i_ino);
+
        /*
         * data=writeback:
         *  The caller's filemap_fdatawrite()/wait will sync the data.
index dfcd41fafb9f3a5c166bba87d18c602e843f82f8..9c0214689de024c27098cf59f80399105873ee1d 100644 (file)
@@ -35,6 +35,7 @@
 #include <linux/quotaops.h>
 #include <linux/seq_file.h>
 #include <linux/proc_fs.h>
+#include <linux/marker.h>
 #include <linux/log2.h>
 #include <linux/crc16.h>
 #include <asm/uaccess.h>
@@ -2951,6 +2952,7 @@ static int ext4_sync_fs(struct super_block *sb, int wait)
 {
        tid_t target;
 
+       trace_mark(ext4_sync_fs, "dev %s wait %d", sb->s_id, wait);
        sb->s_dirt = 0;
        if (jbd2_journal_start_commit(EXT4_SB(sb)->s_journal, &target)) {
                if (wait)
index af4651bf35704781542a2a9fe2f57c38ceed0282..42895d3694581885de894790f505557fda891c24 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/time.h>
 #include <linux/fs.h>
 #include <linux/jbd2.h>
+#include <linux/marker.h>
 #include <linux/errno.h>
 #include <linux/slab.h>
 
@@ -328,6 +329,8 @@ int jbd2_log_do_checkpoint(journal_t *journal)
         * journal straight away.
         */
        result = jbd2_cleanup_journal_tail(journal);
+       trace_mark(jbd2_checkpoint, "dev %s need_checkpoint %d",
+                  journal->j_devname, result);
        jbd_debug(1, "cleanup_journal_tail returned %d\n", result);
        if (result <= 0)
                return result;
index b091e5378fe021a426289ab502636b5d59305bdd..e91f051a98591c8f1970cd8da566dd06e1c7364f 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/time.h>
 #include <linux/fs.h>
 #include <linux/jbd2.h>
+#include <linux/marker.h>
 #include <linux/errno.h>
 #include <linux/slab.h>
 #include <linux/mm.h>
@@ -368,6 +369,8 @@ void jbd2_journal_commit_transaction(journal_t *journal)
        commit_transaction = journal->j_running_transaction;
        J_ASSERT(commit_transaction->t_state == T_RUNNING);
 
+       trace_mark(jbd2_start_commit, "dev %s transaction %d",
+                  journal->j_devname, commit_transaction->t_tid);
        jbd_debug(1, "JBD: starting commit of transaction %d\n",
                        commit_transaction->t_tid);
 
@@ -985,6 +988,9 @@ restart_loop:
        }
        spin_unlock(&journal->j_list_lock);
 
+       trace_mark(jbd2_end_commit, "dev %s transaction %d head %d",
+                  journal->j_devname, commit_transaction->t_tid,
+                  journal->j_tail_sequence);
        jbd_debug(1, "JBD: commit %d complete, head %d\n",
                  journal->j_commit_sequence, journal->j_tail_sequence);