aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/linux-2.6
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2007-12-18 00:26:55 -0500
committerLachlan McIlroy <lachlan@redback.melbourne.sgi.com>2008-02-07 02:20:11 -0500
commitf71354bc3a96c657a70e36dcf980cbad6c9fc63f (patch)
tree1f32c9281e224fd067ff78ebc6dc0b763824bd98 /fs/xfs/linux-2.6
parentedd319dc527733e61eec5bdc9ce20c94634b6482 (diff)
[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>
Diffstat (limited to 'fs/xfs/linux-2.6')
-rw-r--r--fs/xfs/linux-2.6/xfs_export.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/fs/xfs/linux-2.6/xfs_export.c b/fs/xfs/linux-2.6/xfs_export.c
index 15bd4948832c..ca4f66c4de16 100644
--- a/fs/xfs/linux-2.6/xfs_export.c
+++ b/fs/xfs/linux-2.6/xfs_export.c
@@ -118,20 +118,29 @@ xfs_nfs_get_inode(
118 u64 ino, 118 u64 ino,
119 u32 generation) 119 u32 generation)
120 { 120 {
121 xfs_fid_t xfid; 121 xfs_mount_t *mp = XFS_M(sb);
122 bhv_vnode_t *vp; 122 xfs_inode_t *ip;
123 int error; 123 int error;
124 124
125 xfid.fid_len = sizeof(xfs_fid_t) - sizeof(xfid.fid_len); 125 /*
126 xfid.fid_pad = 0; 126 * NFS can sometimes send requests for ino 0. Fail them gracefully.
127 xfid.fid_ino = ino; 127 */
128 xfid.fid_gen = generation; 128 if (ino == 0)
129 return ERR_PTR(-ESTALE);
129 130
130 error = xfs_vget(XFS_M(sb), &vp, &xfid); 131 error = xfs_iget(mp, NULL, ino, 0, XFS_ILOCK_SHARED, &ip, 0);
131 if (error) 132 if (error)
132 return ERR_PTR(-error); 133 return ERR_PTR(-error);
134 if (!ip)
135 return ERR_PTR(-EIO);
136
137 if (!ip->i_d.di_mode || ip->i_d.di_gen != generation) {
138 xfs_iput_new(ip, XFS_ILOCK_SHARED);
139 return ERR_PTR(-ENOENT);
140 }
133 141
134 return vp ? vn_to_inode(vp) : NULL; 142 xfs_iunlock(ip, XFS_ILOCK_SHARED);
143 return ip->i_vnode;
135} 144}
136 145
137STATIC struct dentry * 146STATIC struct dentry *