aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jbd2
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2016-02-22 23:20:30 -0500
committerTheodore Ts'o <tytso@mit.edu>2016-02-22 23:20:30 -0500
commitcb0d9d47a39decbdfaeaa5c063467ed21b2c70b3 (patch)
tree51d6e6c3f5de7a093905fed46d0dcad1ab81ab93 /fs/jbd2
parent1101cd4d13ba2f42c5da4c1b9081f35a73b5df31 (diff)
jbd2: save some atomic ops in __JI_COMMIT_RUNNING handling
Currently we used atomic bit operations to manipulate __JI_COMMIT_RUNNING bit. However this is unnecessary as i_flags are always written and read under j_list_lock. So just change the operations to standard bit operations. Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/jbd2')
-rw-r--r--fs/jbd2/commit.c12
-rw-r--r--fs/jbd2/journal.c2
2 files changed, 7 insertions, 7 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
index ae832cd44dd8..517f2de784cf 100644
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
@@ -220,7 +220,7 @@ static int journal_submit_data_buffers(journal_t *journal,
220 spin_lock(&journal->j_list_lock); 220 spin_lock(&journal->j_list_lock);
221 list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) { 221 list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
222 mapping = jinode->i_vfs_inode->i_mapping; 222 mapping = jinode->i_vfs_inode->i_mapping;
223 set_bit(__JI_COMMIT_RUNNING, &jinode->i_flags); 223 jinode->i_flags |= JI_COMMIT_RUNNING;
224 spin_unlock(&journal->j_list_lock); 224 spin_unlock(&journal->j_list_lock);
225 /* 225 /*
226 * submit the inode data buffers. We use writepage 226 * submit the inode data buffers. We use writepage
@@ -234,8 +234,8 @@ static int journal_submit_data_buffers(journal_t *journal,
234 ret = err; 234 ret = err;
235 spin_lock(&journal->j_list_lock); 235 spin_lock(&journal->j_list_lock);
236 J_ASSERT(jinode->i_transaction == commit_transaction); 236 J_ASSERT(jinode->i_transaction == commit_transaction);
237 clear_bit(__JI_COMMIT_RUNNING, &jinode->i_flags); 237 jinode->i_flags &= ~JI_COMMIT_RUNNING;
238 smp_mb__after_atomic(); 238 smp_mb();
239 wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING); 239 wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
240 } 240 }
241 spin_unlock(&journal->j_list_lock); 241 spin_unlock(&journal->j_list_lock);
@@ -256,7 +256,7 @@ static int journal_finish_inode_data_buffers(journal_t *journal,
256 /* For locking, see the comment in journal_submit_data_buffers() */ 256 /* For locking, see the comment in journal_submit_data_buffers() */
257 spin_lock(&journal->j_list_lock); 257 spin_lock(&journal->j_list_lock);
258 list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) { 258 list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
259 set_bit(__JI_COMMIT_RUNNING, &jinode->i_flags); 259 jinode->i_flags |= JI_COMMIT_RUNNING;
260 spin_unlock(&journal->j_list_lock); 260 spin_unlock(&journal->j_list_lock);
261 err = filemap_fdatawait(jinode->i_vfs_inode->i_mapping); 261 err = filemap_fdatawait(jinode->i_vfs_inode->i_mapping);
262 if (err) { 262 if (err) {
@@ -272,8 +272,8 @@ static int journal_finish_inode_data_buffers(journal_t *journal,
272 ret = err; 272 ret = err;
273 } 273 }
274 spin_lock(&journal->j_list_lock); 274 spin_lock(&journal->j_list_lock);
275 clear_bit(__JI_COMMIT_RUNNING, &jinode->i_flags); 275 jinode->i_flags &= ~JI_COMMIT_RUNNING;
276 smp_mb__after_atomic(); 276 smp_mb();
277 wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING); 277 wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
278 } 278 }
279 279
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
index defa962a8e15..7bf1683e81af 100644
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -2587,7 +2587,7 @@ void jbd2_journal_release_jbd_inode(journal_t *journal,
2587restart: 2587restart:
2588 spin_lock(&journal->j_list_lock); 2588 spin_lock(&journal->j_list_lock);
2589 /* Is commit writing out inode - we have to wait */ 2589 /* Is commit writing out inode - we have to wait */
2590 if (test_bit(__JI_COMMIT_RUNNING, &jinode->i_flags)) { 2590 if (jinode->i_flags & JI_COMMIT_RUNNING) {
2591 wait_queue_head_t *wq; 2591 wait_queue_head_t *wq;
2592 DEFINE_WAIT_BIT(wait, &jinode->i_flags, __JI_COMMIT_RUNNING); 2592 DEFINE_WAIT_BIT(wait, &jinode->i_flags, __JI_COMMIT_RUNNING);
2593 wq = bit_waitqueue(&jinode->i_flags, __JI_COMMIT_RUNNING); 2593 wq = bit_waitqueue(&jinode->i_flags, __JI_COMMIT_RUNNING);