diff options
Diffstat (limited to 'fs/xfs')
-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( | |||
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 | ||