diff options
Diffstat (limited to 'fs/btrfs/ioctl.c')
| -rw-r--r-- | fs/btrfs/ioctl.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 61168805f17..5b3429ab8ec 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -343,7 +343,8 @@ static noinline int btrfs_ioctl_fitrim(struct file *file, void __user *arg)  		return -EOPNOTSUPP;  	if (copy_from_user(&range, arg, sizeof(range)))  		return -EFAULT; -	if (range.start > total_bytes) +	if (range.start > total_bytes || +	    range.len < fs_info->sb->s_blocksize)  		return -EINVAL;  	range.len = min(range.len, total_bytes - range.start); @@ -570,7 +571,8 @@ static int create_snapshot(struct btrfs_root *root, struct dentry *dentry,  		ret = btrfs_commit_transaction(trans,  					       root->fs_info->extent_root);  	} -	BUG_ON(ret); +	if (ret) +		goto fail;  	ret = pending_snapshot->error;  	if (ret) @@ -1223,7 +1225,7 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,  		}  		defrag_count += ret; -		balance_dirty_pages_ratelimited_nr(inode->i_mapping, ret); +		balance_dirty_pages_ratelimited(inode->i_mapping);  		mutex_unlock(&inode->i_mutex);  		if (newer_than) {  |