diff options
Diffstat (limited to 'fs/xfs/xfs_iops.c')
| -rw-r--r-- | fs/xfs/xfs_iops.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index b9c172b3fbb..673704fab74 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -70,9 +70,8 @@ xfs_synchronize_times(  }  /* - * If the linux inode is valid, mark it dirty. - * Used when committing a dirty inode into a transaction so that - * the inode will get written back by the linux code + * If the linux inode is valid, mark it dirty, else mark the dirty state + * in the XFS inode to make sure we pick it up when reclaiming the inode.   */  void  xfs_mark_inode_dirty_sync( @@ -82,6 +81,10 @@ xfs_mark_inode_dirty_sync(  	if (!(inode->i_state & (I_WILL_FREE|I_FREEING)))  		mark_inode_dirty_sync(inode); +	else { +		barrier(); +		ip->i_update_core = 1; +	}  }  void @@ -92,6 +95,11 @@ xfs_mark_inode_dirty(  	if (!(inode->i_state & (I_WILL_FREE|I_FREEING)))  		mark_inode_dirty(inode); +	else { +		barrier(); +		ip->i_update_core = 1; +	} +  }  /*  |