On Sat, Aug 27, 2011 at 01:57:44AM -0400, Christoph Hellwig wrote: > During umount we do not add a dirty inode to the lru and wait for it to > become clean first, but force writeback of data and metadata with > I_WILL_FREE set. Currently there is no way for XFS to detect that the > inode has been redirtied for metadata operations, as we skip the > mark_inode_dirty call during teardown. Fix this by setting i_update_core > nanually in that case, so that the inode gets flushed during inode reclaim. > > Alternatively we could enable calling mark_inode_dirty for inodes in > I_WILL_FREE state, and let the VFS dirty tracking handle this. I decided > against this as we will get better I/O patterns from reclaim compared to > the synchronous writeout in write_inode_now, and always marking the inode > dirty in some way from xfs_mark_inode_dirty is a better safetly net in > either case. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > > Index: linux-2.6/fs/xfs/xfs_iops.c > =================================================================== > --- linux-2.6.orig/fs/xfs/xfs_iops.c 2011-08-26 12:31:19.090631739 +0200 > +++ linux-2.6/fs/xfs/xfs_iops.c 2011-08-26 12:35:43.692531800 +0200 > @@ -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; > + } > } Why the barrier()? Isn't that just a compiler barrier? If you are worried about catching the update vs clearing it in transaction commit, shouldn't that use smp_mb() instead (in both places)? Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs