|
@@ -1408,56 +1408,3 @@ xfs_syncsub(
|
|
|
|
|
|
return XFS_ERROR(last_error);
|
|
|
}
|
|
|
-
|
|
|
-/*
|
|
|
- * xfs_vget - called by DMAPI and NFSD to get vnode from file handle
|
|
|
- */
|
|
|
-int
|
|
|
-xfs_vget(
|
|
|
- xfs_mount_t *mp,
|
|
|
- bhv_vnode_t **vpp,
|
|
|
- xfs_fid_t *xfid)
|
|
|
-{
|
|
|
- xfs_inode_t *ip;
|
|
|
- int error;
|
|
|
- xfs_ino_t ino;
|
|
|
- unsigned int igen;
|
|
|
-
|
|
|
- /*
|
|
|
- * Invalid. Since handles can be created in user space and passed in
|
|
|
- * via gethandle(), this is not cause for a panic.
|
|
|
- */
|
|
|
- if (xfid->fid_len != sizeof(*xfid) - sizeof(xfid->fid_len))
|
|
|
- return XFS_ERROR(EINVAL);
|
|
|
-
|
|
|
- ino = xfid->fid_ino;
|
|
|
- igen = xfid->fid_gen;
|
|
|
-
|
|
|
- /*
|
|
|
- * NFS can sometimes send requests for ino 0. Fail them gracefully.
|
|
|
- */
|
|
|
- if (ino == 0)
|
|
|
- return XFS_ERROR(ESTALE);
|
|
|
-
|
|
|
- error = xfs_iget(mp, NULL, ino, 0, XFS_ILOCK_SHARED, &ip, 0);
|
|
|
- if (error) {
|
|
|
- *vpp = NULL;
|
|
|
- return error;
|
|
|
- }
|
|
|
-
|
|
|
- if (ip == NULL) {
|
|
|
- *vpp = NULL;
|
|
|
- return XFS_ERROR(EIO);
|
|
|
- }
|
|
|
-
|
|
|
- if (ip->i_d.di_mode == 0 || ip->i_d.di_gen != igen) {
|
|
|
- xfs_iput_new(ip, XFS_ILOCK_SHARED);
|
|
|
- *vpp = NULL;
|
|
|
- return XFS_ERROR(ENOENT);
|
|
|
- }
|
|
|
-
|
|
|
- *vpp = XFS_ITOV(ip);
|
|
|
- xfs_iunlock(ip, XFS_ILOCK_SHARED);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|