aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2008-10-05 20:50:06 -0400
committerTheodore Ts'o <tytso@mit.edu>2008-10-05 20:50:06 -0400
commitede86cc473defab74d778aeac14b19f43129d4d1 (patch)
tree19da8009accf1737171f5949413e46a9086d5fdc
parent23f8b79eae8a74e42a006ffa7c456e295c7e1c0d (diff)
ext4: Add debugging markers that can be used by systemtap
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>
-rw-r--r--fs/ext4/fsync.c5
-rw-r--r--fs/ext4/super.c2
-rw-r--r--fs/jbd2/checkpoint.c3
-rw-r--r--fs/jbd2/commit.c6
4 files changed, 16 insertions, 0 deletions
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
index c37d1e86f51a..5afe4370840b 100644
--- a/fs/ext4/fsync.c
+++ b/fs/ext4/fsync.c
@@ -28,6 +28,7 @@
28#include <linux/writeback.h> 28#include <linux/writeback.h>
29#include <linux/jbd2.h> 29#include <linux/jbd2.h>
30#include <linux/blkdev.h> 30#include <linux/blkdev.h>
31#include <linux/marker.h>
31#include "ext4.h" 32#include "ext4.h"
32#include "ext4_jbd2.h" 33#include "ext4_jbd2.h"
33 34
@@ -51,6 +52,10 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)
51 52
52 J_ASSERT(ext4_journal_current_handle() == NULL); 53 J_ASSERT(ext4_journal_current_handle() == NULL);
53 54
55 trace_mark(ext4_sync_file, "dev %s datasync %d ino %ld parent %ld",
56 inode->i_sb->s_id, datasync, inode->i_ino,
57 dentry->d_parent->d_inode->i_ino);
58
54 /* 59 /*
55 * data=writeback: 60 * data=writeback:
56 * The caller's filemap_fdatawrite()/wait will sync the data. 61 * The caller's filemap_fdatawrite()/wait will sync the data.
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index dfcd41fafb9f..9c0214689de0 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -35,6 +35,7 @@
35#include <linux/quotaops.h> 35#include <linux/quotaops.h>
36#include <linux/seq_file.h> 36#include <linux/seq_file.h>
37#include <linux/proc_fs.h> 37#include <linux/proc_fs.h>
38#include <linux/marker.h>
38#include <linux/log2.h> 39#include <linux/log2.h>
39#include <linux/crc16.h> 40#include <linux/crc16.h>
40#include <asm/uaccess.h> 41#include <asm/uaccess.h>
@@ -2951,6 +2952,7 @@ static int ext4_sync_fs(struct super_block *sb, int wait)
2951{ 2952{
2952 tid_t target; 2953 tid_t target;
2953 2954
2955 trace_mark(ext4_sync_fs, "dev %s wait %d", sb->s_id, wait);
2954 sb->s_dirt = 0; 2956 sb->s_dirt = 0;
2955 if (jbd2_journal_start_commit(EXT4_SB(sb)->s_journal, &target)) { 2957 if (jbd2_journal_start_commit(EXT4_SB(sb)->s_journal, &target)) {
2956 if (wait) 2958 if (wait)
diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c
index af4651bf3570..42895d369458 100644
--- a/fs/jbd2/checkpoint.c
+++ b/fs/jbd2/checkpoint.c
@@ -20,6 +20,7 @@
20#include <linux/time.h> 20#include <linux/time.h>
21#include <linux/fs.h> 21#include <linux/fs.h>
22#include <linux/jbd2.h> 22#include <linux/jbd2.h>
23#include <linux/marker.h>
23#include <linux/errno.h> 24#include <linux/errno.h>
24#include <linux/slab.h> 25#include <linux/slab.h>
25 26
@@ -328,6 +329,8 @@ int jbd2_log_do_checkpoint(journal_t *journal)
328 * journal straight away. 329 * journal straight away.
329 */ 330 */
330 result = jbd2_cleanup_journal_tail(journal); 331 result = jbd2_cleanup_journal_tail(journal);
332 trace_mark(jbd2_checkpoint, "dev %s need_checkpoint %d",
333 journal->j_devname, result);
331 jbd_debug(1, "cleanup_journal_tail returned %d\n", result); 334 jbd_debug(1, "cleanup_journal_tail returned %d\n", result);
332 if (result <= 0) 335 if (result <= 0)
333 return result; 336 return result;
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
index b091e5378fe0..e91f051a9859 100644
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
@@ -16,6 +16,7 @@
16#include <linux/time.h> 16#include <linux/time.h>
17#include <linux/fs.h> 17#include <linux/fs.h>
18#include <linux/jbd2.h> 18#include <linux/jbd2.h>
19#include <linux/marker.h>
19#include <linux/errno.h> 20#include <linux/errno.h>
20#include <linux/slab.h> 21#include <linux/slab.h>
21#include <linux/mm.h> 22#include <linux/mm.h>
@@ -368,6 +369,8 @@ void jbd2_journal_commit_transaction(journal_t *journal)
368 commit_transaction = journal->j_running_transaction; 369 commit_transaction = journal->j_running_transaction;
369 J_ASSERT(commit_transaction->t_state == T_RUNNING); 370 J_ASSERT(commit_transaction->t_state == T_RUNNING);
370 371
372 trace_mark(jbd2_start_commit, "dev %s transaction %d",
373 journal->j_devname, commit_transaction->t_tid);
371 jbd_debug(1, "JBD: starting commit of transaction %d\n", 374 jbd_debug(1, "JBD: starting commit of transaction %d\n",
372 commit_transaction->t_tid); 375 commit_transaction->t_tid);
373 376
@@ -985,6 +988,9 @@ restart_loop:
985 } 988 }
986 spin_unlock(&journal->j_list_lock); 989 spin_unlock(&journal->j_list_lock);
987 990
991 trace_mark(jbd2_end_commit, "dev %s transaction %d head %d",
992 journal->j_devname, commit_transaction->t_tid,
993 journal->j_tail_sequence);
988 jbd_debug(1, "JBD: commit %d complete, head %d\n", 994 jbd_debug(1, "JBD: commit %d complete, head %d\n",
989 journal->j_commit_sequence, journal->j_tail_sequence); 995 journal->j_commit_sequence, journal->j_tail_sequence);
990 996