diff options
author | Jan Kara <jack@suse.cz> | 2016-02-22 23:20:30 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2016-02-22 23:20:30 -0500 |
commit | cb0d9d47a39decbdfaeaa5c063467ed21b2c70b3 (patch) | |
tree | 51d6e6c3f5de7a093905fed46d0dcad1ab81ab93 /fs/jbd2 | |
parent | 1101cd4d13ba2f42c5da4c1b9081f35a73b5df31 (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.c | 12 | ||||
-rw-r--r-- | fs/jbd2/journal.c | 2 |
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, | |||
2587 | restart: | 2587 | restart: |
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); |