diff options
Diffstat (limited to 'fs/btrfs/ioctl.c')
| -rw-r--r-- | fs/btrfs/ioctl.c | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index d29992f7dc63..43ecbe620dea 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -562,7 +562,7 @@ static noinline int create_subvol(struct inode *dir,  	struct btrfs_root *root = BTRFS_I(dir)->root;  	struct btrfs_root *new_root;  	struct btrfs_block_rsv block_rsv; -	struct timespec cur_time = current_time(dir); +	struct timespec64 cur_time = current_time(dir);  	struct inode *inode;  	int ret;  	int err; @@ -2438,6 +2438,10 @@ static int btrfs_search_path_in_tree_user(struct inode *inode,  			}  			temp_inode = btrfs_iget(sb, &key2, root, NULL); +			if (IS_ERR(temp_inode)) { +				ret = PTR_ERR(temp_inode); +				goto out; +			}  			ret = inode_permission(temp_inode, MAY_READ | MAY_EXEC);  			iput(temp_inode);  			if (ret) { @@ -3573,7 +3577,7 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen,  		ret = btrfs_extent_same_range(src, loff, BTRFS_MAX_DEDUPE_LEN,  					      dst, dst_loff, &cmp);  		if (ret) -			goto out_unlock; +			goto out_free;  		loff += BTRFS_MAX_DEDUPE_LEN;  		dst_loff += BTRFS_MAX_DEDUPE_LEN; @@ -3583,16 +3587,16 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen,  		ret = btrfs_extent_same_range(src, loff, tail_len, dst,  					      dst_loff, &cmp); +out_free: +	kvfree(cmp.src_pages); +	kvfree(cmp.dst_pages); +  out_unlock:  	if (same_inode)  		inode_unlock(src);  	else  		btrfs_double_inode_unlock(src, dst); -out_free: -	kvfree(cmp.src_pages); -	kvfree(cmp.dst_pages); -  	return ret;  } @@ -5391,7 +5395,7 @@ static long _btrfs_ioctl_set_received_subvol(struct file *file,  	struct btrfs_root *root = BTRFS_I(inode)->root;  	struct btrfs_root_item *root_item = &root->root_item;  	struct btrfs_trans_handle *trans; -	struct timespec ct = current_time(inode); +	struct timespec64 ct = current_time(inode);  	int ret = 0;  	int received_uuid_changed;  |