aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_iget.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-03-28 18:23:52 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-03-28 18:23:52 -0400
commitf21ce8f8447c8be8847dadcfdbcc76b0d7365fa5 (patch)
treefb51d60060453aef9e776c7d3a31588609d34d76 /fs/xfs/xfs_iget.c
parent0c9aac08261512d70d7d4817bd222abca8b6bdd6 (diff)
parent5a5881cdeec2c019b5c9a307800218ee029f7f61 (diff)
Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs
Pull XFS update (part 2) from Ben Myers: "Fixes for tracing of xfs_name strings, flag handling in open_by_handle, a log space hang with freeze/unfreeze, fstrim offset calculations, a section mismatch with xfs_qm_exit, an oops in xlog_recover_process_iunlinks, and a deadlock in xfs_rtfree_extent. There are also additional trace points for attributes, and the addition of a workqueue for allocation to work around kernel stack size limitations." * 'for-linus' of git://oss.sgi.com/xfs/xfs: xfs: add lots of attribute trace points xfs: Fix oops on IO error during xlog_recover_process_iunlinks() xfs: fix fstrim offset calculations xfs: Account log unmount transaction correctly xfs: don't cache inodes read through bulkstat xfs: trace xfs_name strings correctly xfs: introduce an allocation workqueue xfs: Fix open flag handling in open_by_handle code xfs: fix deadlock in xfs_rtfree_extent fs: xfs: fix section mismatch in linux-next
Diffstat (limited to 'fs/xfs/xfs_iget.c')
-rw-r--r--fs/xfs/xfs_iget.c8
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);