jbd2: save some atomic ops in __JI_COMMIT_RUNNING handling
authorJan Kara <jack@suse.cz>
Tue, 23 Feb 2016 04:20:30 +0000 (23:20 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 23 Feb 2016 04:20:30 +0000 (23:20 -0500)
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>
fs/jbd2/commit.c
fs/jbd2/journal.c

index ae832cd44dd8ac22c8fc9d83523b2c819fb1727a..517f2de784cfca75ac91979191b99d41f1a06bd1 100644 (file)
@@ -220,7 +220,7 @@ static int journal_submit_data_buffers(journal_t *journal,
        spin_lock(&journal->j_list_lock);
        list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
                mapping = jinode->i_vfs_inode->i_mapping;
-               set_bit(__JI_COMMIT_RUNNING, &jinode->i_flags);
+               jinode->i_flags |= JI_COMMIT_RUNNING;
                spin_unlock(&journal->j_list_lock);
                /*
                 * submit the inode data buffers. We use writepage
@@ -234,8 +234,8 @@ static int journal_submit_data_buffers(journal_t *journal,
                        ret = err;
                spin_lock(&journal->j_list_lock);
                J_ASSERT(jinode->i_transaction == commit_transaction);
-               clear_bit(__JI_COMMIT_RUNNING, &jinode->i_flags);
-               smp_mb__after_atomic();
+               jinode->i_flags &= ~JI_COMMIT_RUNNING;
+               smp_mb();
                wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
        }
        spin_unlock(&journal->j_list_lock);
@@ -256,7 +256,7 @@ static int journal_finish_inode_data_buffers(journal_t *journal,
        /* For locking, see the comment in journal_submit_data_buffers() */
        spin_lock(&journal->j_list_lock);
        list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
-               set_bit(__JI_COMMIT_RUNNING, &jinode->i_flags);
+               jinode->i_flags |= JI_COMMIT_RUNNING;
                spin_unlock(&journal->j_list_lock);
                err = filemap_fdatawait(jinode->i_vfs_inode->i_mapping);
                if (err) {
@@ -272,8 +272,8 @@ static int journal_finish_inode_data_buffers(journal_t *journal,
                                ret = err;
                }
                spin_lock(&journal->j_list_lock);
-               clear_bit(__JI_COMMIT_RUNNING, &jinode->i_flags);
-               smp_mb__after_atomic();
+               jinode->i_flags &= ~JI_COMMIT_RUNNING;
+               smp_mb();
                wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
        }
 
index defa962a8e15ef51a950f96f04bb80289d1a0678..7bf1683e81af2d9d31f40d5335d80aa01c2d5f27 100644 (file)
@@ -2587,7 +2587,7 @@ void jbd2_journal_release_jbd_inode(journal_t *journal,
 restart:
        spin_lock(&journal->j_list_lock);
        /* Is commit writing out inode - we have to wait */
-       if (test_bit(__JI_COMMIT_RUNNING, &jinode->i_flags)) {
+       if (jinode->i_flags & JI_COMMIT_RUNNING) {
                wait_queue_head_t *wq;
                DEFINE_WAIT_BIT(wait, &jinode->i_flags, __JI_COMMIT_RUNNING);
                wq = bit_waitqueue(&jinode->i_flags, __JI_COMMIT_RUNNING);