diff options
author | Theodore Ts'o <tytso@mit.edu> | 2014-03-09 00:46:23 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2014-03-09 00:46:23 -0500 |
commit | 6e4862a5bb9d12be87e4ea5d9a60836ebed71d28 (patch) | |
tree | ee71b5c4262480b07b34161d1eda8d8cb706074a | |
parent | d2eb0b998990abf51d6e1d3bf16a2637b920a660 (diff) |
jbd2: minimize region locked by j_list_lock in journal_get_create_access()
It's not needed until we start trying to modifying fields in the
journal_head which are protected by j_list_lock.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-rw-r--r-- | fs/jbd2/transaction.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c index 78900a1252b2..357f3dc5201f 100644 --- a/fs/jbd2/transaction.c +++ b/fs/jbd2/transaction.c | |||
@@ -1073,7 +1073,6 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh) | |||
1073 | * reused here. | 1073 | * reused here. |
1074 | */ | 1074 | */ |
1075 | jbd_lock_bh_state(bh); | 1075 | jbd_lock_bh_state(bh); |
1076 | spin_lock(&journal->j_list_lock); | ||
1077 | J_ASSERT_JH(jh, (jh->b_transaction == transaction || | 1076 | J_ASSERT_JH(jh, (jh->b_transaction == transaction || |
1078 | jh->b_transaction == NULL || | 1077 | jh->b_transaction == NULL || |
1079 | (jh->b_transaction == journal->j_committing_transaction && | 1078 | (jh->b_transaction == journal->j_committing_transaction && |
@@ -1096,12 +1095,14 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh) | |||
1096 | jh->b_modified = 0; | 1095 | jh->b_modified = 0; |
1097 | 1096 | ||
1098 | JBUFFER_TRACE(jh, "file as BJ_Reserved"); | 1097 | JBUFFER_TRACE(jh, "file as BJ_Reserved"); |
1098 | spin_lock(&journal->j_list_lock); | ||
1099 | __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved); | 1099 | __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved); |
1100 | } else if (jh->b_transaction == journal->j_committing_transaction) { | 1100 | } else if (jh->b_transaction == journal->j_committing_transaction) { |
1101 | /* first access by this transaction */ | 1101 | /* first access by this transaction */ |
1102 | jh->b_modified = 0; | 1102 | jh->b_modified = 0; |
1103 | 1103 | ||
1104 | JBUFFER_TRACE(jh, "set next transaction"); | 1104 | JBUFFER_TRACE(jh, "set next transaction"); |
1105 | spin_lock(&journal->j_list_lock); | ||
1105 | jh->b_next_transaction = transaction; | 1106 | jh->b_next_transaction = transaction; |
1106 | } | 1107 | } |
1107 | spin_unlock(&journal->j_list_lock); | 1108 | spin_unlock(&journal->j_list_lock); |