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 a98cb4524e6c..bcc6c249b2c7 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c | |||
@@ -289,7 +289,7 @@ xfs_iget_cache_hit( | |||
289 | if (lock_flags != 0) | 289 | if (lock_flags != 0) |
290 | xfs_ilock(ip, lock_flags); | 290 | xfs_ilock(ip, lock_flags); |
291 | 291 | ||
292 | xfs_iflags_clear(ip, XFS_ISTALE); | 292 | xfs_iflags_clear(ip, XFS_ISTALE | XFS_IDONTCACHE); |
293 | XFS_STATS_INC(xs_ig_found); | 293 | XFS_STATS_INC(xs_ig_found); |
294 | 294 | ||
295 | return 0; | 295 | return 0; |
@@ -314,6 +314,7 @@ xfs_iget_cache_miss( | |||
314 | struct xfs_inode *ip; | 314 | struct xfs_inode *ip; |
315 | int error; | 315 | int error; |
316 | xfs_agino_t agino = XFS_INO_TO_AGINO(mp, ino); | 316 | xfs_agino_t agino = XFS_INO_TO_AGINO(mp, ino); |
317 | int iflags; | ||
317 | 318 | ||
318 | ip = xfs_inode_alloc(mp, ino); | 319 | ip = xfs_inode_alloc(mp, ino); |
319 | if (!ip) | 320 | if (!ip) |
@@ -358,8 +359,11 @@ xfs_iget_cache_miss( | |||
358 | * memory barrier that ensures this detection works correctly at lookup | 359 | * memory barrier that ensures this detection works correctly at lookup |
359 | * time. | 360 | * time. |
360 | */ | 361 | */ |
362 | iflags = XFS_INEW; | ||
363 | if (flags & XFS_IGET_DONTCACHE) | ||
364 | iflags |= XFS_IDONTCACHE; | ||
361 | ip->i_udquot = ip->i_gdquot = NULL; | 365 | ip->i_udquot = ip->i_gdquot = NULL; |
362 | xfs_iflags_set(ip, XFS_INEW); | 366 | xfs_iflags_set(ip, iflags); |
363 | 367 | ||
364 | /* insert the new inode */ | 368 | /* insert the new inode */ |
365 | spin_lock(&pag->pag_ici_lock); | 369 | spin_lock(&pag->pag_ici_lock); |