|
@@ -220,7 +220,7 @@ static int journal_submit_data_buffers(journal_t *journal,
|
|
spin_lock(&journal->j_list_lock);
|
|
spin_lock(&journal->j_list_lock);
|
|
list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
|
|
list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
|
|
mapping = jinode->i_vfs_inode->i_mapping;
|
|
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);
|
|
spin_unlock(&journal->j_list_lock);
|
|
/*
|
|
/*
|
|
* submit the inode data buffers. We use writepage
|
|
* submit the inode data buffers. We use writepage
|
|
@@ -234,8 +234,8 @@ static int journal_submit_data_buffers(journal_t *journal,
|
|
ret = err;
|
|
ret = err;
|
|
spin_lock(&journal->j_list_lock);
|
|
spin_lock(&journal->j_list_lock);
|
|
J_ASSERT(jinode->i_transaction == commit_transaction);
|
|
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);
|
|
wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
|
|
}
|
|
}
|
|
spin_unlock(&journal->j_list_lock);
|
|
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() */
|
|
/* For locking, see the comment in journal_submit_data_buffers() */
|
|
spin_lock(&journal->j_list_lock);
|
|
spin_lock(&journal->j_list_lock);
|
|
list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
|
|
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);
|
|
spin_unlock(&journal->j_list_lock);
|
|
err = filemap_fdatawait(jinode->i_vfs_inode->i_mapping);
|
|
err = filemap_fdatawait(jinode->i_vfs_inode->i_mapping);
|
|
if (err) {
|
|
if (err) {
|
|
@@ -272,8 +272,8 @@ static int journal_finish_inode_data_buffers(journal_t *journal,
|
|
ret = err;
|
|
ret = err;
|
|
}
|
|
}
|
|
spin_lock(&journal->j_list_lock);
|
|
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);
|
|
wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
|
|
}
|
|
}
|
|
|
|
|