diff options
author | Christoph Hellwig <hch@infradead.org> | 2008-04-22 17:33:52 +1000 |
---|---|---|
committer | Lachlan McIlroy <lachlan@redback.melbourne.sgi.com> | 2008-04-29 15:53:52 +1000 |
commit | eca450b7c23f804597b87085b2a05bfc5b3ccb8b (patch) | |
tree | 7d39315344e07ae885c9a9fa174b9d8e93e3dc03 /fs/xfs/xfs_vnodeops.c | |
parent | d4377d84189349357e1812eaff6d0504766eea06 (diff) | |
download | kernel-common-eca450b7c23f804597b87085b2a05bfc5b3ccb8b.tar.gz kernel-common-eca450b7c23f804597b87085b2a05bfc5b3ccb8b.tar.bz2 kernel-common-eca450b7c23f804597b87085b2a05bfc5b3ccb8b.zip |
[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>
Diffstat (limited to 'fs/xfs/xfs_vnodeops.c')
-rw-r--r-- | fs/xfs/xfs_vnodeops.c | 22 |
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( struct xfs_name *name, xfs_inode_t **ipp) { - xfs_inode_t *ip; - xfs_ino_t e_inum; + xfs_ino_t inum; int error; uint lock_mode; @@ -1647,12 +1646,21 @@ xfs_lookup( return XFS_ERROR(EIO); lock_mode = xfs_ilock_map_shared(dp); - error = xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip); - if (!error) { - *ipp = ip; - xfs_itrace_ref(ip); - } + error = xfs_dir_lookup(NULL, dp, name, &inum); xfs_iunlock_map_shared(dp, lock_mode); + + if (error) + goto out; + + error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); + if (error) + goto out; + + xfs_itrace_ref(*ipp); + return 0; + + out: + *ipp = NULL; return error; } |