[XFS] simplify xfs_lookup
authorChristoph Hellwig <hch@infradead.org>
Tue, 22 Apr 2008 07:33:52 +0000 (17:33 +1000)
committerLachlan McIlroy <lachlan@redback.melbourne.sgi.com>
Tue, 29 Apr 2008 05:53:52 +0000 (15:53 +1000)
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>
fs/xfs/xfs_vnodeops.c

index 7093d749589b4931b3d691c4c117a27db5ad6a06..637fc1a2bb44f51c49e78517194329a782517eed 100644 (file)
@@ -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;
 }