diff options
Diffstat (limited to 'fs/xfs/xfs_iget.c')
| -rw-r--r-- | fs/xfs/xfs_iget.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index a98cb4524e6..bcc6c249b2c 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c @@ -289,7 +289,7 @@ xfs_iget_cache_hit(  	if (lock_flags != 0)  		xfs_ilock(ip, lock_flags); -	xfs_iflags_clear(ip, XFS_ISTALE); +	xfs_iflags_clear(ip, XFS_ISTALE | XFS_IDONTCACHE);  	XFS_STATS_INC(xs_ig_found);  	return 0; @@ -314,6 +314,7 @@ xfs_iget_cache_miss(  	struct xfs_inode	*ip;  	int			error;  	xfs_agino_t		agino = XFS_INO_TO_AGINO(mp, ino); +	int			iflags;  	ip = xfs_inode_alloc(mp, ino);  	if (!ip) @@ -358,8 +359,11 @@ xfs_iget_cache_miss(  	 * memory barrier that ensures this detection works correctly at lookup  	 * time.  	 */ +	iflags = XFS_INEW; +	if (flags & XFS_IGET_DONTCACHE) +		iflags |= XFS_IDONTCACHE;  	ip->i_udquot = ip->i_gdquot = NULL; -	xfs_iflags_set(ip, XFS_INEW); +	xfs_iflags_set(ip, iflags);  	/* insert the new inode */  	spin_lock(&pag->pag_ici_lock);  |