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,