Use the newly introduced file_operation callback for FITRIM ioctl. This removes some common code, eg. permission check, buffer copying, which is now done by generic vfs code. --- fs/f2fs/file.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index ceb575f99048..4c3f5eab22aa 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -2252,38 +2252,27 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg) return ret; } -static int f2fs_ioc_fitrim(struct file *filp, unsigned long arg) +static long f2fs_ioc_fitrim(struct file *file, struct fstrim_range *range) { struct inode *inode = file_inode(filp); struct super_block *sb = inode->i_sb; struct request_queue *q = bdev_get_queue(sb->s_bdev); - struct fstrim_range range; int ret; - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - if (!f2fs_hw_support_discard(F2FS_SB(sb))) return -EOPNOTSUPP; - if (copy_from_user(&range, (struct fstrim_range __user *)arg, - sizeof(range))) - return -EFAULT; - ret = mnt_want_write_file(filp); if (ret) return ret; - range.minlen = max((unsigned int)range.minlen, + range->minlen = max((unsigned int)range->minlen, q->limits.discard_granularity); - ret = f2fs_trim_fs(F2FS_SB(sb), &range); + ret = f2fs_trim_fs(F2FS_SB(sb), range); mnt_drop_write_file(filp); if (ret < 0) return ret; - if (copy_to_user((struct fstrim_range __user *)arg, &range, - sizeof(range))) - return -EFAULT; f2fs_update_time(F2FS_I_SB(inode), REQ_TIME); return 0; } @@ -4124,8 +4113,6 @@ static long __f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) return f2fs_ioc_abort_volatile_write(filp); case F2FS_IOC_SHUTDOWN: return f2fs_ioc_shutdown(filp, arg); - case FITRIM: - return f2fs_ioc_fitrim(filp, arg); case FS_IOC_SET_ENCRYPTION_POLICY: return f2fs_ioc_set_encryption_policy(filp, arg); case FS_IOC_GET_ENCRYPTION_POLICY: @@ -4405,7 +4392,6 @@ long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) case F2FS_IOC_RELEASE_VOLATILE_WRITE: case F2FS_IOC_ABORT_VOLATILE_WRITE: case F2FS_IOC_SHUTDOWN: - case FITRIM: case FS_IOC_SET_ENCRYPTION_POLICY: case FS_IOC_GET_ENCRYPTION_PWSALT: case FS_IOC_GET_ENCRYPTION_POLICY: @@ -4461,4 +4447,5 @@ const struct file_operations f2fs_file_operations = { #endif .splice_read = generic_file_splice_read, .splice_write = iter_file_splice_write, + .fitrim = f2fs_ioc_fitrim, }; -- 2.20.1