diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-28 18:23:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-28 18:23:52 -0400 |
commit | f21ce8f8447c8be8847dadcfdbcc76b0d7365fa5 (patch) | |
tree | fb51d60060453aef9e776c7d3a31588609d34d76 /fs/xfs/xfs_iget.c | |
parent | 0c9aac08261512d70d7d4817bd222abca8b6bdd6 (diff) | |
parent | 5a5881cdeec2c019b5c9a307800218ee029f7f61 (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.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); |