|
@@ -45,15 +45,21 @@
|
|
|
#include "xfs_vnodeops.h"
|
|
|
#include "xfs_trace.h"
|
|
|
|
|
|
+
|
|
|
+static int xfs_swap_extents(
|
|
|
+ xfs_inode_t *ip, /* target inode */
|
|
|
+ xfs_inode_t *tip, /* tmp inode */
|
|
|
+ xfs_swapext_t *sxp);
|
|
|
+
|
|
|
/*
|
|
|
- * Syssgi interface for swapext
|
|
|
+ * ioctl interface for swapext
|
|
|
*/
|
|
|
int
|
|
|
xfs_swapext(
|
|
|
xfs_swapext_t *sxp)
|
|
|
{
|
|
|
xfs_inode_t *ip, *tip;
|
|
|
- struct file *file, *target_file;
|
|
|
+ struct file *file, *tmp_file;
|
|
|
int error = 0;
|
|
|
|
|
|
/* Pull information for the target fd */
|
|
@@ -68,46 +74,46 @@ xfs_swapext(
|
|
|
goto out_put_file;
|
|
|
}
|
|
|
|
|
|
- target_file = fget((int)sxp->sx_fdtmp);
|
|
|
- if (!target_file) {
|
|
|
+ tmp_file = fget((int)sxp->sx_fdtmp);
|
|
|
+ if (!tmp_file) {
|
|
|
error = XFS_ERROR(EINVAL);
|
|
|
goto out_put_file;
|
|
|
}
|
|
|
|
|
|
- if (!(target_file->f_mode & FMODE_WRITE) ||
|
|
|
- (target_file->f_flags & O_APPEND)) {
|
|
|
+ if (!(tmp_file->f_mode & FMODE_WRITE) ||
|
|
|
+ (tmp_file->f_flags & O_APPEND)) {
|
|
|
error = XFS_ERROR(EBADF);
|
|
|
- goto out_put_target_file;
|
|
|
+ goto out_put_tmp_file;
|
|
|
}
|
|
|
|
|
|
if (IS_SWAPFILE(file->f_path.dentry->d_inode) ||
|
|
|
- IS_SWAPFILE(target_file->f_path.dentry->d_inode)) {
|
|
|
+ IS_SWAPFILE(tmp_file->f_path.dentry->d_inode)) {
|
|
|
error = XFS_ERROR(EINVAL);
|
|
|
- goto out_put_target_file;
|
|
|
+ goto out_put_tmp_file;
|
|
|
}
|
|
|
|
|
|
ip = XFS_I(file->f_path.dentry->d_inode);
|
|
|
- tip = XFS_I(target_file->f_path.dentry->d_inode);
|
|
|
+ tip = XFS_I(tmp_file->f_path.dentry->d_inode);
|
|
|
|
|
|
if (ip->i_mount != tip->i_mount) {
|
|
|
error = XFS_ERROR(EINVAL);
|
|
|
- goto out_put_target_file;
|
|
|
+ goto out_put_tmp_file;
|
|
|
}
|
|
|
|
|
|
if (ip->i_ino == tip->i_ino) {
|
|
|
error = XFS_ERROR(EINVAL);
|
|
|
- goto out_put_target_file;
|
|
|
+ goto out_put_tmp_file;
|
|
|
}
|
|
|
|
|
|
if (XFS_FORCED_SHUTDOWN(ip->i_mount)) {
|
|
|
error = XFS_ERROR(EIO);
|
|
|
- goto out_put_target_file;
|
|
|
+ goto out_put_tmp_file;
|
|
|
}
|
|
|
|
|
|
error = xfs_swap_extents(ip, tip, sxp);
|
|
|
|
|
|
- out_put_target_file:
|
|
|
- fput(target_file);
|
|
|
+ out_put_tmp_file:
|
|
|
+ fput(tmp_file);
|
|
|
out_put_file:
|
|
|
fput(file);
|
|
|
out:
|
|
@@ -186,7 +192,7 @@ xfs_swap_extents_check_format(
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int
|
|
|
+static int
|
|
|
xfs_swap_extents(
|
|
|
xfs_inode_t *ip, /* target inode */
|
|
|
xfs_inode_t *tip, /* tmp inode */
|