--- fs/xfs/xfs_dfrag.c.orig 2010-06-15 09:16:05.000000000 -0400 +++ fs/xfs/xfs_dfrag.c 2010-06-15 09:30:17.000000000 -0400 @@ -69,7 +69,9 @@ xfs_swapext( goto out; } - if (!(file->f_mode & FMODE_WRITE) || (file->f_flags & O_APPEND)) { + if (!(file->f_mode & FMODE_WRITE) || + !(file->f_mode & FMODE_READ) || + (file->f_flags & O_APPEND)) { error = XFS_ERROR(EBADF); goto out_put_file; } @@ -81,7 +83,8 @@ xfs_swapext( } if (!(tmp_file->f_mode & FMODE_WRITE) || - (tmp_file->f_flags & O_APPEND)) { + !(tmp_file->f_mode & FMODE_READ) || + (tmp_file->f_flags & O_APPEND)) { error = XFS_ERROR(EBADF); goto out_put_tmp_file; } @@ -112,6 +115,11 @@ xfs_swapext( error = xfs_swap_extents(ip, tip, sxp); + if(!error) { + file_remove_suid(tmp_file); + file_remove_suid(file); + } + out_put_tmp_file: fput(tmp_file); out_put_file: