On Mon, Feb 08, 2016 at 03:24:17PM +1100, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > Now that we keep certain on-disk information in the VFS inode rather > than in a separate XFS specific stucture, we have to be careful of > the VFS code clearing that information when we re-initialise > reclaimable cached inodes during lookup. If we don't do this, then > we lose critical information from the inode and that results in > corruption being detected. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > --- Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> > fs/xfs/xfs_icache.c | 22 +++++++++++++++++++++- > 1 file changed, 21 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c > index 7c26f86..9ca28655 100644 > --- a/fs/xfs/xfs_icache.c > +++ b/fs/xfs/xfs_icache.c > @@ -135,6 +135,26 @@ xfs_inode_free( > } > > /* > + * When we recycle a reclaimable inode, we need to re-initialise the VFS inode > + * part of the structure. This is made more complex by the fact we store > + * information about the on-disk values in the VFS inode and so we can't just > + * overwrite it's values unconditionally. Hence we save the parameters we > + * need to retain across reinitialisation, and rewrite them into the VFS inode > + * after resetting it's state even if resetting fails. > + */ > +static int > +xfs_reinit_inode( > + struct xfs_mount *mp, > + struct inode *inode) > +{ > + int error; > + > + error = inode_init_always(mp->m_super, inode); > + > + return error; > +} > + > +/* > * Check the validity of the inode we just found it the cache > */ > static int > @@ -208,7 +228,7 @@ xfs_iget_cache_hit( > spin_unlock(&ip->i_flags_lock); > rcu_read_unlock(); > > - error = inode_init_always(mp->m_super, inode); > + error = xfs_reinit_inode(mp, inode); > if (error) { > /* > * Re-initializing the inode failed, and we are in deep > -- > 2.5.0 > > _______________________________________________ > xfs mailing list > xfs@xxxxxxxxxxx > http://oss.sgi.com/mailman/listinfo/xfs _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs