diff options
| -rw-r--r-- | fs/btrfs/ioctl.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index ace88c1df54..a74edc79753 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -1154,8 +1154,11 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,  	u64 new_align = ~((u64)128 * 1024 - 1);  	struct page **pages = NULL; -	if (extent_thresh == 0) -		extent_thresh = 256 * 1024; +	if (isize == 0) +		return 0; + +	if (range->start >= isize) +		return -EINVAL;  	if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS) {  		if (range->compress_type > BTRFS_COMPRESS_TYPES) @@ -1164,8 +1167,8 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,  			compress_type = range->compress_type;  	} -	if (isize == 0) -		return 0; +	if (extent_thresh == 0) +		extent_thresh = 256 * 1024;  	/*  	 * if we were not given a file, allocate a readahead  |