Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 124864
b: refs/heads/master
c: 56e73ec
h: refs/heads/master
v: v3
  • Loading branch information
David Chinner authored and Lachlan McIlroy committed Oct 30, 2008
1 parent 110aab5 commit ff4e613
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2b7035fd7473c799ca3372092d72c768c7db329d
refs/heads/master: 56e73ec47d749047f441e6b9d60d964535d31c3b
18 changes: 11 additions & 7 deletions trunk/fs/xfs/xfs_iget.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,18 +159,19 @@ xfs_iget_cache_miss(
goto out_destroy;
}

if (lock_flags)
xfs_ilock(ip, lock_flags);

/*
* Preload the radix tree so we can insert safely under the
* write spinlock.
* write spinlock. Note that we cannot sleep inside the preload
* region.
*/
if (radix_tree_preload(GFP_KERNEL)) {
error = EAGAIN;
goto out_destroy;
goto out_unlock;
}

if (lock_flags)
xfs_ilock(ip, lock_flags);

mask = ~(((XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog)) - 1);
first_index = agino & mask;
write_lock(&pag->pag_ici_lock);
Expand All @@ -181,7 +182,7 @@ xfs_iget_cache_miss(
WARN_ON(error != -EEXIST);
XFS_STATS_INC(xs_ig_dup);
error = EAGAIN;
goto out_unlock;
goto out_preload_end;
}

/* These values _must_ be set before releasing the radix tree lock! */
Expand All @@ -193,9 +194,12 @@ xfs_iget_cache_miss(
*ipp = ip;
return 0;

out_unlock:
out_preload_end:
write_unlock(&pag->pag_ici_lock);
radix_tree_preload_end();
out_unlock:
if (lock_flags)
xfs_iunlock(ip, lock_flags);
out_destroy:
xfs_idestroy(ip);
return error;
Expand Down

0 comments on commit ff4e613

Please sign in to comment.