diff options
author | Tao Ma <boyu.mt@taobao.com> | 2011-05-22 21:45:26 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2011-05-22 21:45:26 -0400 |
commit | 28e35e42fb255cbaeee8b9f89643f26fe376374d (patch) | |
tree | db83cfc348e1ff652aea17eff6ff4eb07d8cd8a9 | |
parent | f6d2f6b327ceef5c689581529a852dc6ec3b74a6 (diff) |
jbd2: Fix the wrong calculation of t_max_wait in update_t_max_wait
t_max_wait is added in commit 8e85fb3f to indicate how long we
were waiting for new transaction to start. In commit 6d0bf005,
it is moved to another function named update_t_max_wait to
avoid a build warning. But the wrong thing is that the original
'ts' is initialized in the start of function start_this_handle
and we can calculate t_max_wait in the right way. while with
this change, ts is initialized within the function and t_max_wait
can never be calculated right.
This patch moves the initialization of ts to the original beginning
of start_this_handle and pass it to function update_t_max_wait so
that it can be calculated right and the build warning is avoided also.
Cc: Jan Kara <jack@suse.cz>
Signed-off-by: Tao Ma <boyu.mt@taobao.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
-rw-r--r-- | fs/jbd2/transaction.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c index 05fa77a23711..85a055ef93fe 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c | |||
@@ -82,7 +82,7 @@ jbd2_get_transaction(journal_t *journal, transaction_t *transaction) | |||
82 | */ | 82 | */ |
83 | 83 | ||
84 | /* | 84 | /* |
85 | * Update transiaction's maximum wait time, if debugging is enabled. | 85 | * Update transaction's maximum wait time, if debugging is enabled. |
86 | * | 86 | * |
87 | * In order for t_max_wait to be reliable, it must be protected by a | 87 | * In order for t_max_wait to be reliable, it must be protected by a |
88 | * lock. But doing so will mean that start_this_handle() can not be | 88 | * lock. But doing so will mean that start_this_handle() can not be |
@@ -91,11 +91,10 @@ jbd2_get_transaction(journal_t *journal, transaction_t *transaction) | |||
91 | * means that maximum wait time reported by the jbd2_run_stats | 91 | * means that maximum wait time reported by the jbd2_run_stats |
92 | * tracepoint will always be zero. | 92 | * tracepoint will always be zero. |
93 | */ | 93 | */ |
94 | static inline void update_t_max_wait(transaction_t *transaction) | 94 | static inline void update_t_max_wait(transaction_t *transaction, |
95 | unsigned long ts) | ||
95 | { | 96 | { |
96 | #ifdef CONFIG_JBD2_DEBUG | 97 | #ifdef CONFIG_JBD2_DEBUG |
97 | unsigned long ts = jiffies; | ||
98 | |||
99 | if (jbd2_journal_enable_debug && | 98 | if (jbd2_journal_enable_debug && |
100 | time_after(transaction->t_start, ts)) { | 99 | time_after(transaction->t_start, ts)) { |
101 | ts = jbd2_time_diff(ts, transaction->t_start); | 100 | ts = jbd2_time_diff(ts, transaction->t_start); |
@@ -121,6 +120,7 @@ static int start_this_handle(journal_t *journal, handle_t *handle, | |||
121 | tid_t tid; | 120 | tid_t tid; |
122 | int needed, need_to_start; | 121 | int needed, need_to_start; |
123 | int nblocks = handle->h_buffer_credits; | 122 | int nblocks = handle->h_buffer_credits; |
123 | unsigned long ts = jiffies; | ||
124 | 124 | ||
125 | if (nblocks > journal->j_max_transaction_buffers) { | 125 | if (nblocks > journal->j_max_transaction_buffers) { |
126 | printk(KERN_ERR "JBD: %s wants too many credits (%d > %d)\n", | 126 | printk(KERN_ERR "JBD: %s wants too many credits (%d > %d)\n", |
@@ -271,7 +271,7 @@ repeat: | |||
271 | /* OK, account for the buffers that this operation expects to | 271 | /* OK, account for the buffers that this operation expects to |
272 | * use and add the handle to the running transaction. | 272 | * use and add the handle to the running transaction. |
273 | */ | 273 | */ |
274 | update_t_max_wait(transaction); | 274 | update_t_max_wait(transaction, ts); |
275 | handle->h_transaction = transaction; | 275 | handle->h_transaction = transaction; |
276 | atomic_inc(&transaction->t_updates); | 276 | atomic_inc(&transaction->t_updates); |
277 | atomic_inc(&transaction->t_handle_count); | 277 | atomic_inc(&transaction->t_handle_count); |