ext4: accumulate jbd2 stats in jiffies From: Eric Sandeen Accumulate jbd2 stats in jiffies not msecs, per akpm's suggestion. Convert to msecs on when displayed. jbd2_time_diff() should still be moved to a common header file. Signed-off-by: Eric Sandeen Signed-off-by: Mingming Cao --- Index: linux-2.6.24-rc3/fs/jbd2/checkpoint.c =================================================================== --- linux-2.6.24-rc3.orig/fs/jbd2/checkpoint.c +++ linux-2.6.24-rc3/fs/jbd2/checkpoint.c @@ -326,7 +326,7 @@ int jbd2_log_do_checkpoint(journal_t *jo goto out; transaction = journal->j_checkpoint_transactions; if (transaction->t_chp_stats.cs_chp_time == 0) - transaction->t_chp_stats.cs_chp_time = CURRENT_MSECS; + transaction->t_chp_stats.cs_chp_time = jiffies; this_tid = transaction->t_tid; restart: /* Index: linux-2.6.24-rc3/fs/jbd2/commit.c =================================================================== --- linux-2.6.24-rc3.orig/fs/jbd2/commit.c +++ linux-2.6.24-rc3/fs/jbd2/commit.c @@ -340,7 +340,7 @@ void jbd2_journal_commit_transaction(jou commit_transaction->t_state = T_LOCKED; stats.ts_wait = commit_transaction->t_max_wait; - stats.ts_locked = CURRENT_MSECS; + stats.ts_locked = jiffies; stats.ts_running = jbd2_time_diff(commit_transaction->t_start, stats.ts_locked); @@ -414,7 +414,7 @@ void jbd2_journal_commit_transaction(jou */ jbd2_journal_switch_revoke_table(journal); - stats.ts_flushing = CURRENT_MSECS; + stats.ts_flushing = jiffies; stats.ts_locked = jbd2_time_diff(stats.ts_locked, stats.ts_flushing); commit_transaction->t_state = T_FLUSH; @@ -508,7 +508,7 @@ void jbd2_journal_commit_transaction(jou */ commit_transaction->t_state = T_COMMIT; - stats.ts_logging = CURRENT_MSECS; + stats.ts_logging = jiffies; stats.ts_flushing = jbd2_time_diff(stats.ts_flushing, stats.ts_logging); stats.ts_blocks = commit_transaction->t_outstanding_credits; stats.ts_blocks_logged = 0; @@ -907,7 +907,7 @@ restart_loop: J_ASSERT(commit_transaction->t_state == T_COMMIT); - commit_transaction->t_start = CURRENT_MSECS; + commit_transaction->t_start = jiffies; stats.ts_logging = jbd2_time_diff(stats.ts_logging, commit_transaction->t_start); Index: linux-2.6.24-rc3/fs/jbd2/transaction.c =================================================================== --- linux-2.6.24-rc3.orig/fs/jbd2/transaction.c +++ linux-2.6.24-rc3/fs/jbd2/transaction.c @@ -60,7 +60,7 @@ jbd2_get_transaction(journal_t *journal, J_ASSERT(journal->j_running_transaction == NULL); journal->j_running_transaction = transaction; transaction->t_max_wait = 0; - transaction->t_start = CURRENT_MSECS; + transaction->t_start = jiffies; return transaction; } @@ -87,7 +87,7 @@ static int start_this_handle(journal_t * int nblocks = handle->h_buffer_credits; transaction_t *new_transaction = NULL; int ret = 0; - unsigned long ts = CURRENT_MSECS; + unsigned long ts = jiffies; if (nblocks > journal->j_max_transaction_buffers) { printk(KERN_ERR "JBD: %s wants too many credits (%d > %d)\n", Index: linux-2.6.24-rc3/include/linux/jbd2.h =================================================================== --- linux-2.6.24-rc3.orig/include/linux/jbd2.h +++ linux-2.6.24-rc3/include/linux/jbd2.h @@ -626,16 +626,13 @@ struct transaction_stats_s #define ts_written u.chp.cs_written #define ts_dropped u.chp.cs_dropped -#define CURRENT_MSECS (jiffies_to_msecs(jiffies)) - -static inline unsigned int -jbd2_time_diff(unsigned int start, unsigned int end) +static inline unsigned long +jbd2_time_diff(unsigned long start, unsigned long end) { - if (unlikely(start > end)) - end = end + (~0UL - start); - else - end -= start; - return end; + if (end >= start) + return end - start; + + return end + (MAX_JIFFY_OFFSET - start); } /** Index: linux-2.6.24-rc3/fs/jbd2/journal.c =================================================================== --- linux-2.6.24-rc3.orig/fs/jbd2/journal.c +++ linux-2.6.24-rc3/fs/jbd2/journal.c @@ -712,15 +712,19 @@ static int jbd2_seq_history_show(struct return 0; } if (ts->ts_type == JBD2_STATS_RUN) - seq_printf(seq, "%-4s %-5lu %-5lu %-5lu %-5lu %-5lu %-5lu " + seq_printf(seq, "%-4s %-5lu %-5u %-5u %-5u %-5u %-5u " "%-6lu %-5lu %-5lu\n", "R", ts->ts_tid, - ts->ts_wait, ts->ts_running, ts->ts_locked, - ts->ts_flushing, ts->ts_logging, + jiffies_to_msecs(ts->ts_wait), + jiffies_to_msecs(ts->ts_running), + jiffies_to_msecs(ts->ts_locked), + jiffies_to_msecs(ts->ts_flushing), + jiffies_to_msecs(ts->ts_logging), ts->ts_handle_count, ts->ts_blocks, ts->ts_blocks_logged); else if (ts->ts_type == JBD2_STATS_CHECKPOINT) - seq_printf(seq, "%-4s %-5lu %48s %-5lu %-5lu %-5lu %-5lu\n", - "C", ts->ts_tid, " ", ts->ts_chp_time, + seq_printf(seq, "%-4s %-5lu %48s %-5u %-5lu %-5lu %-5lu\n", + "C", ts->ts_tid, " ", + jiffies_to_msecs(ts->ts_chp_time), ts->ts_written, ts->ts_dropped, ts->ts_forced_to_close); else @@ -812,21 +816,21 @@ static int jbd2_seq_info_show(struct seq if (s->stats->ts_tid == 0) return 0; seq_printf(seq, "average: \n %lums waiting for transaction\n", - s->stats->ts_wait / s->stats->ts_tid); + jiffies_to_msecs(s->stats->ts_wait / s->stats->ts_tid)); seq_printf(seq, " %lums running transaction\n", - s->stats->ts_running / s->stats->ts_tid); + jiffies_to_msecs(s->stats->ts_running / s->stats->ts_tid)); seq_printf(seq, " %lums transaction was being locked\n", - s->stats->ts_locked / s->stats->ts_tid); + jiffies_to_msecs(s->stats->ts_locked / s->stats->ts_tid)); seq_printf(seq, " %lums flushing data (in ordered mode)\n", - s->stats->ts_flushing / s->stats->ts_tid); + jiffies_to_msecs(s->stats->ts_flushing / s->stats->ts_tid)); seq_printf(seq, " %lums logging transaction\n", - s->stats->ts_logging / s->stats->ts_tid); + jiffies_to_msecs(s->stats->ts_logging / s->stats->ts_tid)); seq_printf(seq, " %lu handles per transaction\n", - s->stats->ts_handle_count / s->stats->ts_tid); + s->stats->ts_handle_count / s->stats->ts_tid); seq_printf(seq, " %lu blocks per transaction\n", - s->stats->ts_blocks / s->stats->ts_tid); + s->stats->ts_blocks / s->stats->ts_tid); seq_printf(seq, " %lu logged blocks per transaction\n", - s->stats->ts_blocks_logged / s->stats->ts_tid); + s->stats->ts_blocks_logged / s->stats->ts_tid); return 0; } - To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html