ext3: Use bitops to read/modify EXT3_I(inode)->i_state
At several places we modify EXT3_I(inode)->i_state without holding i_mutex (ext3_release_file, ext3_bmap, ext3_journalled_writepage, ext3_do_update_inode, ...). These modifications are racy and we can lose updates to i_state. So convert handling of i_state to use bitops which are atomic. Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
@@ -33,9 +33,9 @@
|
||||
*/
|
||||
static int ext3_release_file (struct inode * inode, struct file * filp)
|
||||
{
|
||||
if (EXT3_I(inode)->i_state & EXT3_STATE_FLUSH_ON_CLOSE) {
|
||||
if (ext3_test_inode_state(inode, EXT3_STATE_FLUSH_ON_CLOSE)) {
|
||||
filemap_flush(inode->i_mapping);
|
||||
EXT3_I(inode)->i_state &= ~EXT3_STATE_FLUSH_ON_CLOSE;
|
||||
ext3_clear_inode_state(inode, EXT3_STATE_FLUSH_ON_CLOSE);
|
||||
}
|
||||
/* if we are the last writer on the inode, drop the block reservation */
|
||||
if ((filp->f_mode & FMODE_WRITE) &&
|
||||
|
Reference in New Issue
Block a user