summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Sandeen <sandeen@redhat.com>2013-01-30 06:39:28 +0100
committerTheodore Ts'o <tytso@mit.edu>2013-01-30 06:39:28 +0100
commite7b04ac00ee273cb2c699ed14139fc072add4097 (patch)
tree07a7b90bec97ee73f0a7732e6ac1121f81264ea9
parentext4: fix possible use-after-free with AIO (diff)
downloadlinux-e7b04ac00ee273cb2c699ed14139fc072add4097.tar.xz
linux-e7b04ac00ee273cb2c699ed14139fc072add4097.zip
jbd2: don't wake kjournald unnecessarily
Don't send an extra wakeup to kjournald in the case where we already have the proper target in j_commit_request, i.e. that transaction has already been requested for commit. commit deeeaf13 "jbd2: fix fsync() tid wraparound bug" changed the logic leading to a wakeup, but it caused some extra wakeups which were found to lead to a measurable performance regression. Signed-off-by: Eric Sandeen <sandeen@redhat.com> [tytso@mit.edu: reworked check to make it clearer] Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-rw-r--r--fs/jbd2/journal.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
index dbf41f9452db..1a80e3146a59 100644
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -513,6 +513,10 @@ int __jbd2_log_space_left(journal_t *journal)
*/
int __jbd2_log_start_commit(journal_t *journal, tid_t target)
{
+ /* Return if the txn has already requested to be committed */
+ if (journal->j_commit_request == target)
+ return 0;
+
/*
* The only transaction we can possibly wait upon is the
* currently running transaction (if it exists). Otherwise,