aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2008-04-22 03:33:52 -0400
committerLachlan McIlroy <lachlan@redback.melbourne.sgi.com>2008-04-29 01:53:52 -0400
commiteca450b7c23f804597b87085b2a05bfc5b3ccb8b (patch)
tree7d39315344e07ae885c9a9fa174b9d8e93e3dc03
parentd4377d84189349357e1812eaff6d0504766eea06 (diff)
[XFS] simplify xfs_lookup
Opencode xfs-kill-xfs_dir_lookup_int here, which gets rid of a lock roundtrip, and lots of stack space. Also kill the di_mode == 0 check that has been done in xfs_iget for a few years now. SGI-PV: 976035 SGI-Modid: xfs-linux-melb:xfs-kern:30901a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
-rw-r--r--fs/xfs/xfs_vnodeops.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c
index 7093d749589b..637fc1a2bb44 100644
--- a/fs/xfs/xfs_vnodeops.c
+++ b/fs/xfs/xfs_vnodeops.c
@@ -1636,8 +1636,7 @@ xfs_lookup(
1636 struct xfs_name *name, 1636 struct xfs_name *name,
1637 xfs_inode_t **ipp) 1637 xfs_inode_t **ipp)
1638{ 1638{
1639 xfs_inode_t *ip; 1639 xfs_ino_t inum;
1640 xfs_ino_t e_inum;
1641 int error; 1640 int error;
1642 uint lock_mode; 1641 uint lock_mode;
1643 1642
@@ -1647,12 +1646,21 @@ xfs_lookup(
1647 return XFS_ERROR(EIO); 1646 return XFS_ERROR(EIO);
1648 1647
1649 lock_mode = xfs_ilock_map_shared(dp); 1648 lock_mode = xfs_ilock_map_shared(dp);
1650 error = xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip); 1649 error = xfs_dir_lookup(NULL, dp, name, &inum);
1651 if (!error) {
1652 *ipp = ip;
1653 xfs_itrace_ref(ip);
1654 }
1655 xfs_iunlock_map_shared(dp, lock_mode); 1650 xfs_iunlock_map_shared(dp, lock_mode);
1651
1652 if (error)
1653 goto out;
1654
1655 error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0);
1656 if (error)
1657 goto out;
1658
1659 xfs_itrace_ref(*ipp);
1660 return 0;
1661
1662 out:
1663 *ipp = NULL;
1656 return error; 1664 return error;
1657} 1665}
1658 1666