On Mon, May 23, 2011 at 11:20:34AM +1000, Dave Chinner wrote: > > The state used to track dirty inode release calls is not reset when > an inode is reallocated and reused from the reclaimable state. This > leads to specualtive preallocation not being truncated away in the > expected manner for local files until the inode is subsequently > truncated, freed or cycles out of the cache. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > --- > fs/xfs/xfs_iget.c | 7 +++++++ > 1 files changed, 7 insertions(+), 0 deletions(-) > > diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c > index cb9b6d1..e75e757 100644 > --- a/fs/xfs/xfs_iget.c > +++ b/fs/xfs/xfs_iget.c > @@ -241,6 +241,13 @@ xfs_iget_cache_hit( > */ > ip->i_flags |= XFS_IRECLAIM; > > + /* > + * clear the dirty release state as we are now effectively a > + * new inode and so we need to treat speculative preallocation > + * accordingly. > + */ > + ip->i_flags &= ~XFS_IDIRTY_RELEASE; Btw, don't we need to clear even more flags here? To me it seems we need to clear XFS_ISTALE, XFS_IFILESTREAM and XFS_ITRUNCATED as well. _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs