Commit eca450b7c23f804597b87085b2a05bfc5b3ccb8b

Authored by Christoph Hellwig
Committed by Lachlan McIlroy
1 parent d4377d8418

[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>

Showing 1 changed file with 15 additions and 7 deletions Side-by-side Diff

fs/xfs/xfs_vnodeops.c
... ... @@ -1636,8 +1636,7 @@
1636 1636 struct xfs_name *name,
1637 1637 xfs_inode_t **ipp)
1638 1638 {
1639   - xfs_inode_t *ip;
1640   - xfs_ino_t e_inum;
  1639 + xfs_ino_t inum;
1641 1640 int error;
1642 1641 uint lock_mode;
1643 1642  
1644 1643  
... ... @@ -1647,12 +1646,21 @@
1647 1646 return XFS_ERROR(EIO);
1648 1647  
1649 1648 lock_mode = xfs_ilock_map_shared(dp);
1650   - error = xfs_dir_lookup_int(dp, lock_mode, name, &e_inum, &ip);
1651   - if (!error) {
1652   - *ipp = ip;
1653   - xfs_itrace_ref(ip);
1654   - }
  1649 + error = xfs_dir_lookup(NULL, dp, name, &inum);
1655 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 1664 return error;
1657 1665 }
1658 1666