diff options
Diffstat (limited to 'fs/ext4/ioctl.c')
| -rw-r--r-- | fs/ext4/ioctl.c | 24 | 
1 files changed, 24 insertions, 0 deletions
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index bf5ae883b1b..eb3bc2fe647 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -331,6 +331,30 @@ mext_out:  		return err;  	} +	case FITRIM: +	{ +		struct super_block *sb = inode->i_sb; +		struct fstrim_range range; +		int ret = 0; + +		if (!capable(CAP_SYS_ADMIN)) +			return -EPERM; + +		if (copy_from_user(&range, (struct fstrim_range *)arg, +		    sizeof(range))) +			return -EFAULT; + +		ret = ext4_trim_fs(sb, &range); +		if (ret < 0) +			return ret; + +		if (copy_to_user((struct fstrim_range *)arg, &range, +		    sizeof(range))) +			return -EFAULT; + +		return 0; +	} +  	default:  		return -ENOTTY;  	}  |