linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] jbd2: wake up j_wait_done_commit before commit callback
@ 2016-06-16  3:45 Wang Shilong
  2016-06-17 10:05 ` Wang Shilong
  2016-06-20 14:45 ` Jan Kara
  0 siblings, 2 replies; 4+ messages in thread
From: Wang Shilong @ 2016-06-16  3:45 UTC (permalink / raw)
  To: linux-ext4

From: Wang Shilong <wshilong@ddn.com>

Lustre register some callbacks in ext4 to keep data consistency,
we see millons callbacks possibility on MDS for metadata operations.

If there are many commit callbacks which might take some cpu
time, we can mark commit done before we call commit callback.
this can relax some thread waiting for commit finished, for example
transaction throttle in end transaction.

Signed-off-by: Wang Shilong <wshilong@ddn.com>
---
 fs/jbd2/commit.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
index 7007809..a9cf5a4 100644
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
@@ -379,6 +379,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
 	tid_t first_tid;
 	int update_tail;
 	int csum_size = 0;
+	int need_free = 0;
 	LIST_HEAD(io_bufs);
 	LIST_HEAD(log_bufs);
 
@@ -1100,9 +1101,6 @@ restart_loop:
 
 	write_unlock(&journal->j_state_lock);
 
-	if (journal->j_commit_callback)
-		journal->j_commit_callback(journal, commit_transaction);
-
 	trace_jbd2_end_commit(journal, commit_transaction);
 	jbd_debug(1, "JBD2: commit %d complete, head %d\n",
 		  journal->j_commit_sequence, journal->j_tail_sequence);
@@ -1114,12 +1112,18 @@ restart_loop:
 	if (commit_transaction->t_checkpoint_list == NULL &&
 	    commit_transaction->t_checkpoint_io_list == NULL) {
 		__jbd2_journal_drop_transaction(journal, commit_transaction);
-		jbd2_journal_free_transaction(commit_transaction);
+		need_free = 1;
 	}
 	spin_unlock(&journal->j_list_lock);
 	write_unlock(&journal->j_state_lock);
 	wake_up(&journal->j_wait_done_commit);
 
+	if (journal->j_commit_callback)
+		journal->j_commit_callback(journal, commit_transaction);
+
+	if (need_free)
+		jbd2_journal_free_transaction(commit_transaction);
+
 	/*
 	 * Calculate overall stats
 	 */
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-06-22 11:10 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-16  3:45 [PATCH] jbd2: wake up j_wait_done_commit before commit callback Wang Shilong
2016-06-17 10:05 ` Wang Shilong
2016-06-22 11:04   ` Wang Shilong
2016-06-20 14:45 ` Jan Kara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).