diff options
author | Theodore Ts'o <tytso@mit.edu> | 2013-02-08 21:59:22 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2013-02-08 21:59:22 -0500 |
commit | 9924a92a8c217576bd2a2b1bbbb854462f1a00ae (patch) | |
tree | 5c4eaee350e38cd2854fd6029da9f2a822ee184e /fs/ext4/migrate.c | |
parent | 722887ddc8982ff40e40b650fbca9ae1e56259bc (diff) |
ext4: pass context information to jbd2__journal_start()
So we can better understand what bits of ext4 are responsible for
long-running jbd2 handles, use jbd2__journal_start() so we can pass
context information for logging purposes.
The recommended way for finding the longer-running handles is:
T=/sys/kernel/debug/tracing
EVENT=$T/events/jbd2/jbd2_handle_stats
echo "interval > 5" > $EVENT/filter
echo 1 > $EVENT/enable
./run-my-fs-benchmark
cat $T/trace > /tmp/problem-handles
This will list handles that were active for longer than 20ms. Having
longer-running handles is bad, because a commit started at the wrong
time could stall for those 20+ milliseconds, which could delay an
fsync() or an O_SYNC operation. Here is an example line from the
trace file describing a handle which lived on for 311 jiffies, or over
1.2 seconds:
postmark-2917 [000] .... 196.435786: jbd2_handle_stats: dev 254,32
tid 570 type 2 line_no 2541 interval 311 sync 0 requested_blocks 1
dirtied_blocks 0
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/migrate.c')
-rw-r--r-- | fs/ext4/migrate.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c index db8226d595fa..4e4fcfd342f8 100644 --- a/fs/ext4/migrate.c +++ b/fs/ext4/migrate.c | |||
@@ -456,7 +456,7 @@ int ext4_ext_migrate(struct inode *inode) | |||
456 | */ | 456 | */ |
457 | return retval; | 457 | return retval; |
458 | 458 | ||
459 | handle = ext4_journal_start(inode, | 459 | handle = ext4_journal_start(inode, EXT4_HT_MIGRATE, |
460 | EXT4_DATA_TRANS_BLOCKS(inode->i_sb) + | 460 | EXT4_DATA_TRANS_BLOCKS(inode->i_sb) + |
461 | EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3 + | 461 | EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3 + |
462 | EXT4_MAXQUOTAS_INIT_BLOCKS(inode->i_sb) | 462 | EXT4_MAXQUOTAS_INIT_BLOCKS(inode->i_sb) |
@@ -507,7 +507,7 @@ int ext4_ext_migrate(struct inode *inode) | |||
507 | ext4_set_inode_state(inode, EXT4_STATE_EXT_MIGRATE); | 507 | ext4_set_inode_state(inode, EXT4_STATE_EXT_MIGRATE); |
508 | up_read((&EXT4_I(inode)->i_data_sem)); | 508 | up_read((&EXT4_I(inode)->i_data_sem)); |
509 | 509 | ||
510 | handle = ext4_journal_start(inode, 1); | 510 | handle = ext4_journal_start(inode, EXT4_HT_MIGRATE, 1); |
511 | if (IS_ERR(handle)) { | 511 | if (IS_ERR(handle)) { |
512 | /* | 512 | /* |
513 | * It is impossible to update on-disk structures without | 513 | * It is impossible to update on-disk structures without |