|
|
@@ -2037,45 +2037,37 @@ static int f2fs_ioc_defragment(struct file *filp, unsigned long arg)
|
|
|
if (!S_ISREG(inode->i_mode))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- err = mnt_want_write_file(filp);
|
|
|
- if (err)
|
|
|
- return err;
|
|
|
-
|
|
|
- if (f2fs_readonly(sbi->sb)) {
|
|
|
- err = -EROFS;
|
|
|
- goto out;
|
|
|
- }
|
|
|
+ if (f2fs_readonly(sbi->sb))
|
|
|
+ return -EROFS;
|
|
|
|
|
|
if (copy_from_user(&range, (struct f2fs_defragment __user *)arg,
|
|
|
- sizeof(range))) {
|
|
|
- err = -EFAULT;
|
|
|
- goto out;
|
|
|
- }
|
|
|
+ sizeof(range)))
|
|
|
+ return -EFAULT;
|
|
|
|
|
|
/* verify alignment of offset & size */
|
|
|
- if (range.start & (F2FS_BLKSIZE - 1) ||
|
|
|
- range.len & (F2FS_BLKSIZE - 1)) {
|
|
|
- err = -EINVAL;
|
|
|
- goto out;
|
|
|
- }
|
|
|
+ if (range.start & (F2FS_BLKSIZE - 1) || range.len & (F2FS_BLKSIZE - 1))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
if (unlikely((range.start + range.len) >> PAGE_SHIFT >
|
|
|
- sbi->max_file_blocks)) {
|
|
|
- err = -EINVAL;
|
|
|
- goto out;
|
|
|
- }
|
|
|
+ sbi->max_file_blocks))
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ err = mnt_want_write_file(filp);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
|
|
|
err = f2fs_defragment_range(sbi, filp, &range);
|
|
|
+ mnt_drop_write_file(filp);
|
|
|
+
|
|
|
f2fs_update_time(sbi, REQ_TIME);
|
|
|
if (err < 0)
|
|
|
- goto out;
|
|
|
+ return err;
|
|
|
|
|
|
if (copy_to_user((struct f2fs_defragment __user *)arg, &range,
|
|
|
sizeof(range)))
|
|
|
- err = -EFAULT;
|
|
|
-out:
|
|
|
- mnt_drop_write_file(filp);
|
|
|
- return err;
|
|
|
+ return -EFAULT;
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
|