|
@@ -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);
|