diff mbox

jbd2: don't wake kjournald unnecessarily

Message ID 50D12DAA.9050700@redhat.com
State Superseded, archived
Headers show

Commit Message

Eric Sandeen Dec. 19, 2012, 2:59 a.m. UTC
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>
---

--
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

Comments

Jan Kara Dec. 19, 2012, 8:09 a.m. UTC | #1
On Tue 18-12-12 20:59:54, Eric Sandeen wrote:
> 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>
  Looks good. You can add: Reviewed-by: Jan Kara <jack@suse.cz>

							Honza
> ---
> 
> diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
> index dbf41f9..89970d5 100644
> --- a/fs/jbd2/journal.c
> +++ b/fs/jbd2/journal.c
> @@ -518,7 +518,8 @@ int __jbd2_log_start_commit(journal_t *journal, tid_t target)
>  	 * currently running transaction (if it exists).  Otherwise,
>  	 * the target tid must be an old one.
>  	 */
> -	if (journal->j_running_transaction &&
> +	if (journal->j_commit_request != target &&
> +	    journal->j_running_transaction &&
>  	    journal->j_running_transaction->t_tid == target) {
>  		/*
>  		 * We want a new commit: OK, mark the request and wakeup the
diff mbox

Patch

diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
index dbf41f9..89970d5 100644
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -518,7 +518,8 @@  int __jbd2_log_start_commit(journal_t *journal, tid_t target)
 	 * currently running transaction (if it exists).  Otherwise,
 	 * the target tid must be an old one.
 	 */
-	if (journal->j_running_transaction &&
+	if (journal->j_commit_request != target &&
+	    journal->j_running_transaction &&
 	    journal->j_running_transaction->t_tid == target) {
 		/*
 		 * We want a new commit: OK, mark the request and wakeup the