Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 84481
b: refs/heads/master
c: f71354b
h: refs/heads/master
i:
  84479: e30caf1
v: v3
  • Loading branch information
Christoph Hellwig authored and Lachlan McIlroy committed Feb 7, 2008
1 parent 6ab2ca0 commit 3b90a03
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 85 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: edd319dc527733e61eec5bdc9ce20c94634b6482
refs/heads/master: f71354bc3a96c657a70e36dcf980cbad6c9fc63f
25 changes: 17 additions & 8 deletions trunk/fs/xfs/linux-2.6/xfs_export.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 *
Expand Down
53 changes: 0 additions & 53 deletions trunk/fs/xfs/xfs_vfsops.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

1 change: 0 additions & 1 deletion trunk/fs/xfs/xfs_vfsops.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
21 changes: 0 additions & 21 deletions trunk/fs/xfs/xfs_vnodeops.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
1 change: 0 additions & 1 deletion trunk/fs/xfs/xfs_vnodeops.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 3b90a03

Please sign in to comment.