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>
This commit is contained in:
parent
23f8b79eae
commit
ede86cc473
@ -28,6 +28,7 @@
|
|||||||
#include <linux/writeback.h>
|
#include <linux/writeback.h>
|
||||||
#include <linux/jbd2.h>
|
#include <linux/jbd2.h>
|
||||||
#include <linux/blkdev.h>
|
#include <linux/blkdev.h>
|
||||||
|
#include <linux/marker.h>
|
||||||
#include "ext4.h"
|
#include "ext4.h"
|
||||||
#include "ext4_jbd2.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);
|
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:
|
* data=writeback:
|
||||||
* The caller's filemap_fdatawrite()/wait will sync the data.
|
* The caller's filemap_fdatawrite()/wait will sync the data.
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include <linux/quotaops.h>
|
#include <linux/quotaops.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
|
#include <linux/marker.h>
|
||||||
#include <linux/log2.h>
|
#include <linux/log2.h>
|
||||||
#include <linux/crc16.h>
|
#include <linux/crc16.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
@ -2951,6 +2952,7 @@ static int ext4_sync_fs(struct super_block *sb, int wait)
|
|||||||
{
|
{
|
||||||
tid_t target;
|
tid_t target;
|
||||||
|
|
||||||
|
trace_mark(ext4_sync_fs, "dev %s wait %d", sb->s_id, wait);
|
||||||
sb->s_dirt = 0;
|
sb->s_dirt = 0;
|
||||||
if (jbd2_journal_start_commit(EXT4_SB(sb)->s_journal, &target)) {
|
if (jbd2_journal_start_commit(EXT4_SB(sb)->s_journal, &target)) {
|
||||||
if (wait)
|
if (wait)
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include <linux/time.h>
|
#include <linux/time.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/jbd2.h>
|
#include <linux/jbd2.h>
|
||||||
|
#include <linux/marker.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
|
||||||
@ -328,6 +329,8 @@ int jbd2_log_do_checkpoint(journal_t *journal)
|
|||||||
* journal straight away.
|
* journal straight away.
|
||||||
*/
|
*/
|
||||||
result = jbd2_cleanup_journal_tail(journal);
|
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);
|
jbd_debug(1, "cleanup_journal_tail returned %d\n", result);
|
||||||
if (result <= 0)
|
if (result <= 0)
|
||||||
return result;
|
return result;
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <linux/time.h>
|
#include <linux/time.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/jbd2.h>
|
#include <linux/jbd2.h>
|
||||||
|
#include <linux/marker.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
@ -368,6 +369,8 @@ void jbd2_journal_commit_transaction(journal_t *journal)
|
|||||||
commit_transaction = journal->j_running_transaction;
|
commit_transaction = journal->j_running_transaction;
|
||||||
J_ASSERT(commit_transaction->t_state == T_RUNNING);
|
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",
|
jbd_debug(1, "JBD: starting commit of transaction %d\n",
|
||||||
commit_transaction->t_tid);
|
commit_transaction->t_tid);
|
||||||
|
|
||||||
@ -985,6 +988,9 @@ restart_loop:
|
|||||||
}
|
}
|
||||||
spin_unlock(&journal->j_list_lock);
|
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",
|
jbd_debug(1, "JBD: commit %d complete, head %d\n",
|
||||||
journal->j_commit_sequence, journal->j_tail_sequence);
|
journal->j_commit_sequence, journal->j_tail_sequence);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user