Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 84484
b: refs/heads/master
c: 35fec8d
h: refs/heads/master
v: v3
  • Loading branch information
Christoph Hellwig authored and Lachlan McIlroy committed Feb 7, 2008
1 parent 9468d4c commit 46a0089
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 42 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: 199037c598daf5f3602dace68c331665a4f4f0c1
refs/heads/master: 35fec8df65217546f6d9d508b203c1d135a67fbc
67 changes: 26 additions & 41 deletions trunk/fs/xfs/xfs_dfrag.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,76 +52,61 @@ xfs_swapext(
xfs_swapext_t __user *sxu)
{
xfs_swapext_t *sxp;
xfs_inode_t *ip=NULL, *tip=NULL;
xfs_mount_t *mp;
struct file *fp = NULL, *tfp = NULL;
bhv_vnode_t *vp, *tvp;
xfs_inode_t *ip, *tip;
struct file *file, *target_file;
int error = 0;

sxp = kmem_alloc(sizeof(xfs_swapext_t), KM_MAYFAIL);
if (!sxp) {
error = XFS_ERROR(ENOMEM);
goto error0;
goto out;
}

if (copy_from_user(sxp, sxu, sizeof(xfs_swapext_t))) {
error = XFS_ERROR(EFAULT);
goto error0;
goto out_free_sxp;
}

/* Pull information for the target fd */
if (((fp = fget((int)sxp->sx_fdtarget)) == NULL) ||
((vp = vn_from_inode(fp->f_path.dentry->d_inode)) == NULL)) {
file = fget((int)sxp->sx_fdtarget);
if (!file) {
error = XFS_ERROR(EINVAL);
goto error0;
}

ip = xfs_vtoi(vp);
if (ip == NULL) {
error = XFS_ERROR(EBADF);
goto error0;
goto out_free_sxp;
}

if (((tfp = fget((int)sxp->sx_fdtmp)) == NULL) ||
((tvp = vn_from_inode(tfp->f_path.dentry->d_inode)) == NULL)) {
target_file = fget((int)sxp->sx_fdtmp);
if (!target_file) {
error = XFS_ERROR(EINVAL);
goto error0;
goto out_put_file;
}

tip = xfs_vtoi(tvp);
if (tip == NULL) {
error = XFS_ERROR(EBADF);
goto error0;
}
ip = XFS_I(file->f_path.dentry->d_inode);
tip = XFS_I(target_file->f_path.dentry->d_inode);

if (ip->i_mount != tip->i_mount) {
error = XFS_ERROR(EINVAL);
goto error0;
error = XFS_ERROR(EINVAL);
goto out_put_target_file;
}

if (ip->i_ino == tip->i_ino) {
error = XFS_ERROR(EINVAL);
goto error0;
error = XFS_ERROR(EINVAL);
goto out_put_target_file;
}

mp = ip->i_mount;

if (XFS_FORCED_SHUTDOWN(mp)) {
error = XFS_ERROR(EIO);
goto error0;
if (XFS_FORCED_SHUTDOWN(ip->i_mount)) {
error = XFS_ERROR(EIO);
goto out_put_target_file;
}

error = xfs_swap_extents(ip, tip, sxp);

error0:
if (fp != NULL)
fput(fp);
if (tfp != NULL)
fput(tfp);

if (sxp != NULL)
kmem_free(sxp, sizeof(xfs_swapext_t));

out_put_target_file:
fput(target_file);
out_put_file:
fput(file);
out_free_sxp:
kmem_free(sxp, sizeof(xfs_swapext_t));
out:
return error;
}

Expand Down

0 comments on commit 46a0089

Please sign in to comment.