[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: Christoph Hellwig <hch@infradead.org> Signed-off-by: Vlad Apostolov <vapo@sgi.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
		
							parent
							
								
									edd319dc52
								
							
						
					
					
						commit
						f71354bc3a
					
				| @ -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); | ||||
| 
 | ||||
| 	return vp ? vn_to_inode(vp) : NULL; | ||||
| 	if (!ip->i_d.di_mode || ip->i_d.di_gen != generation) { | ||||
| 		xfs_iput_new(ip, XFS_ILOCK_SHARED); | ||||
| 		return ERR_PTR(-ENOENT); | ||||
| 	} | ||||
| 
 | ||||
| 	xfs_iunlock(ip, XFS_ILOCK_SHARED); | ||||
| 	return ip->i_vnode; | ||||
| } | ||||
| 
 | ||||
| STATIC struct dentry * | ||||
|  | ||||
| @ -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; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -3457,27 +3457,6 @@ std_return: | ||||
| 	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, | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user