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>
This commit is contained in:
Родитель
d2eb0b9989
Коммит
6e4862a5bb
|
@ -1073,7 +1073,6 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)
|
|||
* reused here.
|
||||
*/
|
||||
jbd_lock_bh_state(bh);
|
||||
spin_lock(&journal->j_list_lock);
|
||||
J_ASSERT_JH(jh, (jh->b_transaction == transaction ||
|
||||
jh->b_transaction == NULL ||
|
||||
(jh->b_transaction == journal->j_committing_transaction &&
|
||||
|
@ -1096,12 +1095,14 @@ int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)
|
|||
jh->b_modified = 0;
|
||||
|
||||
JBUFFER_TRACE(jh, "file as BJ_Reserved");
|
||||
spin_lock(&journal->j_list_lock);
|
||||
__jbd2_journal_file_buffer(jh, transaction, BJ_Reserved);
|
||||
} else if (jh->b_transaction == journal->j_committing_transaction) {
|
||||
/* first access by this transaction */
|
||||
jh->b_modified = 0;
|
||||
|
||||
JBUFFER_TRACE(jh, "set next transaction");
|
||||
spin_lock(&journal->j_list_lock);
|
||||
jh->b_next_transaction = transaction;
|
||||
}
|
||||
spin_unlock(&journal->j_list_lock);
|
||||
|
|
Загрузка…
Ссылка в новой задаче