Commit eca450b7c23f804597b87085b2a05bfc5b3ccb8b
Committed by
Lachlan McIlroy
1 parent
d4377d8418
Exists in
master
and in
20 other branches
[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 |