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 /fs/jbd2 | |
| 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>
Diffstat (limited to 'fs/jbd2')
| -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); |
