diff options
author | Theodore Ts'o <tytso@mit.edu> | 2014-03-08 19:11:36 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2014-03-08 19:11:36 -0500 |
commit | 3469a32a1e948c54204b5dd6f7476a7d11349e9e (patch) | |
tree | d6039ae11b109ddb71e9724a46d54337535a2d6e /fs/jbd2/journal.c | |
parent | df3c1e9a05ff25aca9f54a6c08b77003e2e32bf1 (diff) |
jbd2: don't hold j_state_lock while calling wake_up()
The j_state_lock is one of the hottest locks in the jbd2 layer and
thus one of its scalability bottlenecks.
We don't need to be holding the j_state_lock while we are calling
wake_up(&journal->j_wait_commit), so release the lock a little bit
earlier.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/jbd2/journal.c')
-rw-r--r-- | fs/jbd2/journal.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index 244b6f6b7908..67b8e303946c 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c | |||
@@ -302,8 +302,8 @@ static void journal_kill_thread(journal_t *journal) | |||
302 | journal->j_flags |= JBD2_UNMOUNT; | 302 | journal->j_flags |= JBD2_UNMOUNT; |
303 | 303 | ||
304 | while (journal->j_task) { | 304 | while (journal->j_task) { |
305 | wake_up(&journal->j_wait_commit); | ||
306 | write_unlock(&journal->j_state_lock); | 305 | write_unlock(&journal->j_state_lock); |
306 | wake_up(&journal->j_wait_commit); | ||
307 | wait_event(journal->j_wait_done_commit, journal->j_task == NULL); | 307 | wait_event(journal->j_wait_done_commit, journal->j_task == NULL); |
308 | write_lock(&journal->j_state_lock); | 308 | write_lock(&journal->j_state_lock); |
309 | } | 309 | } |
@@ -710,8 +710,8 @@ int jbd2_log_wait_commit(journal_t *journal, tid_t tid) | |||
710 | while (tid_gt(tid, journal->j_commit_sequence)) { | 710 | while (tid_gt(tid, journal->j_commit_sequence)) { |
711 | jbd_debug(1, "JBD2: want %d, j_commit_sequence=%d\n", | 711 | jbd_debug(1, "JBD2: want %d, j_commit_sequence=%d\n", |
712 | tid, journal->j_commit_sequence); | 712 | tid, journal->j_commit_sequence); |
713 | wake_up(&journal->j_wait_commit); | ||
714 | read_unlock(&journal->j_state_lock); | 713 | read_unlock(&journal->j_state_lock); |
714 | wake_up(&journal->j_wait_commit); | ||
715 | wait_event(journal->j_wait_done_commit, | 715 | wait_event(journal->j_wait_done_commit, |
716 | !tid_gt(tid, journal->j_commit_sequence)); | 716 | !tid_gt(tid, journal->j_commit_sequence)); |
717 | read_lock(&journal->j_state_lock); | 717 | read_lock(&journal->j_state_lock); |