Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f71354bc authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Lachlan McIlroy
Browse files

[XFS] Cleanup various fid related bits:



- merge xfs_fid2 into it's only caller xfs_dm_inode_to_fh.
- remove xfs_vget and opencode it in the two callers, simplifying
  both of them by avoiding the awkward calling convetion.
- assign directly to the dm_fid_t members in various places in the
  dmapi code instead of casting them to xfs_fid_t first (which
  is identical to dm_fid_t)

SGI-PV: 974747
SGI-Modid: xfs-linux-melb:xfs-kern:30258a

Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
Signed-off-by: default avatarVlad Apostolov <vapo@sgi.com>
Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
parent edd319dc
Loading
Loading
Loading
Loading
+17 −8
Original line number Diff line number Diff line
@@ -118,20 +118,29 @@ xfs_nfs_get_inode(
	u64			ino,
	u32			generation)
 {
	xfs_fid_t		xfid;
	bhv_vnode_t		*vp;
 	xfs_mount_t		*mp = XFS_M(sb);
	xfs_inode_t		*ip;
	int			error;

	xfid.fid_len = sizeof(xfs_fid_t) - sizeof(xfid.fid_len);
	xfid.fid_pad = 0;
	xfid.fid_ino = ino;
	xfid.fid_gen = generation;
	/*
	 * NFS can sometimes send requests for ino 0.  Fail them gracefully.
	 */
	if (ino == 0)
		return ERR_PTR(-ESTALE);

	error = xfs_vget(XFS_M(sb), &vp, &xfid);
	error = xfs_iget(mp, NULL, ino, 0, XFS_ILOCK_SHARED, &ip, 0);
	if (error)
		return ERR_PTR(-error);
	if (!ip)
		return ERR_PTR(-EIO);

	if (!ip->i_d.di_mode || ip->i_d.di_gen != generation) {
		xfs_iput_new(ip, XFS_ILOCK_SHARED);
		return ERR_PTR(-ENOENT);
	}

	return vp ? vn_to_inode(vp) : NULL;
	xfs_iunlock(ip, XFS_ILOCK_SHARED);
	return ip->i_vnode;
}

STATIC struct dentry *
+0 −53
Original line number Diff line number Diff line
@@ -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;
}
+0 −1
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@ int xfs_mntupdate(struct xfs_mount *mp, int *flags,
		struct xfs_mount_args *args);
int xfs_root(struct xfs_mount *mp, bhv_vnode_t **vpp);
int xfs_sync(struct xfs_mount *mp, int flags);
int xfs_vget(struct xfs_mount *mp, bhv_vnode_t **vpp, struct xfs_fid *xfid);
void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname,
		int lnnum);
void xfs_attr_quiesce(struct xfs_mount *mp);
+0 −21
Original line number Diff line number Diff line
@@ -3457,27 +3457,6 @@ xfs_symlink(
	goto std_return;
}


int
xfs_fid2(
	xfs_inode_t	*ip,
	xfs_fid_t	*xfid)
{
	xfs_itrace_entry(ip);

	xfid->fid_len = sizeof(xfs_fid_t) - sizeof(xfid->fid_len);
	xfid->fid_pad = 0;
	/*
	 * use memcpy because the inode is a long long and there's no
	 * assurance that xfid->fid_ino is properly aligned.
	 */
	memcpy(&xfid->fid_ino, &ip->i_ino, sizeof(xfid->fid_ino));
	xfid->fid_gen = ip->i_d.di_gen;

	return 0;
}


int
xfs_rwlock(
	xfs_inode_t	*ip,
+0 −1
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize,
int xfs_symlink(struct xfs_inode *dp, bhv_vname_t *dentry,
		char *target_path, mode_t mode, bhv_vnode_t **vpp,
		struct cred *credp);
int xfs_fid2(struct xfs_inode *ip, struct xfs_fid *xfid);
int xfs_rwlock(struct xfs_inode *ip, bhv_vrwlock_t locktype);
void xfs_rwunlock(struct xfs_inode *ip, bhv_vrwlock_t locktype);
int xfs_inode_flush(struct xfs_inode *ip, int flags);