mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	btrfs: qgroup: Cleanup old inaccurate facilities
Cleanup the old facilities which use old btrfs_qgroup_reserve() function call, replace them with the newer version, and remove the "__" prefix in them. Also, make btrfs_qgroup_reserve/free() functions private, as they are now only used inside qgroup codes. Now, the whole btrfs qgroup is swithed to use the new reserve facilities. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
		
							parent
							
								
									df480633b8
								
							
						
					
					
						commit
						7cf5b97650
					
				
					 9 changed files with 60 additions and 156 deletions
				
			
		| 
						 | 
					@ -3452,11 +3452,9 @@ enum btrfs_reserve_flush_enum {
 | 
				
			||||||
	BTRFS_RESERVE_FLUSH_ALL,
 | 
						BTRFS_RESERVE_FLUSH_ALL,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int btrfs_check_data_free_space(struct inode *inode, u64 bytes, u64 write_bytes);
 | 
					int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len);
 | 
				
			||||||
int __btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len);
 | 
					 | 
				
			||||||
int btrfs_alloc_data_chunk_ondemand(struct inode *inode, u64 bytes);
 | 
					int btrfs_alloc_data_chunk_ondemand(struct inode *inode, u64 bytes);
 | 
				
			||||||
void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes);
 | 
					void btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len);
 | 
				
			||||||
void __btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len);
 | 
					 | 
				
			||||||
void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans,
 | 
					void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans,
 | 
				
			||||||
				struct btrfs_root *root);
 | 
									struct btrfs_root *root);
 | 
				
			||||||
void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans);
 | 
					void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans);
 | 
				
			||||||
| 
						 | 
					@ -3472,10 +3470,8 @@ void btrfs_subvolume_release_metadata(struct btrfs_root *root,
 | 
				
			||||||
				      u64 qgroup_reserved);
 | 
									      u64 qgroup_reserved);
 | 
				
			||||||
int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes);
 | 
					int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes);
 | 
				
			||||||
void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes);
 | 
					void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes);
 | 
				
			||||||
int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes);
 | 
					int btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len);
 | 
				
			||||||
int __btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len);
 | 
					void btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len);
 | 
				
			||||||
void btrfs_delalloc_release_space(struct inode *inode, u64 num_bytes);
 | 
					 | 
				
			||||||
void __btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len);
 | 
					 | 
				
			||||||
void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type);
 | 
					void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type);
 | 
				
			||||||
struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root,
 | 
					struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root,
 | 
				
			||||||
					      unsigned short type);
 | 
										      unsigned short type);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3356,7 +3356,7 @@ static int cache_save_setup(struct btrfs_block_group_cache *block_group,
 | 
				
			||||||
	num_pages *= 16;
 | 
						num_pages *= 16;
 | 
				
			||||||
	num_pages *= PAGE_CACHE_SIZE;
 | 
						num_pages *= PAGE_CACHE_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = __btrfs_check_data_free_space(inode, 0, num_pages);
 | 
						ret = btrfs_check_data_free_space(inode, 0, num_pages);
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		goto out_put;
 | 
							goto out_put;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3365,7 +3365,7 @@ static int cache_save_setup(struct btrfs_block_group_cache *block_group,
 | 
				
			||||||
					      &alloc_hint);
 | 
										      &alloc_hint);
 | 
				
			||||||
	if (!ret)
 | 
						if (!ret)
 | 
				
			||||||
		dcs = BTRFS_DC_SETUP;
 | 
							dcs = BTRFS_DC_SETUP;
 | 
				
			||||||
	__btrfs_free_reserved_data_space(inode, 0, num_pages);
 | 
						btrfs_free_reserved_data_space(inode, 0, num_pages);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out_put:
 | 
					out_put:
 | 
				
			||||||
	iput(inode);
 | 
						iput(inode);
 | 
				
			||||||
| 
						 | 
					@ -4033,28 +4033,12 @@ int btrfs_alloc_data_chunk_ondemand(struct inode *inode, u64 bytes)
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * This will check the space that the inode allocates from to make sure we have
 | 
					 | 
				
			||||||
 * enough space for bytes.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
int btrfs_check_data_free_space(struct inode *inode, u64 bytes, u64 write_bytes)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct btrfs_root *root = BTRFS_I(inode)->root;
 | 
					 | 
				
			||||||
	int ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ret = btrfs_alloc_data_chunk_ondemand(inode, bytes);
 | 
					 | 
				
			||||||
	if (ret < 0)
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	ret = btrfs_qgroup_reserve(root, write_bytes);
 | 
					 | 
				
			||||||
	return ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * New check_data_free_space() with ability for precious data reservation
 | 
					 * New check_data_free_space() with ability for precious data reservation
 | 
				
			||||||
 * Will replace old btrfs_check_data_free_space(), but for patch split,
 | 
					 * Will replace old btrfs_check_data_free_space(), but for patch split,
 | 
				
			||||||
 * add a new function first and then replace it.
 | 
					 * add a new function first and then replace it.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int __btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
 | 
					int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct btrfs_root *root = BTRFS_I(inode)->root;
 | 
						struct btrfs_root *root = BTRFS_I(inode)->root;
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
| 
						 | 
					@ -4073,26 +4057,6 @@ int __btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Called if we need to clear a data reservation for this inode.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct btrfs_root *root = BTRFS_I(inode)->root;
 | 
					 | 
				
			||||||
	struct btrfs_space_info *data_sinfo;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* make sure bytes are sectorsize aligned */
 | 
					 | 
				
			||||||
	bytes = ALIGN(bytes, root->sectorsize);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	data_sinfo = root->fs_info->data_sinfo;
 | 
					 | 
				
			||||||
	spin_lock(&data_sinfo->lock);
 | 
					 | 
				
			||||||
	WARN_ON(data_sinfo->bytes_may_use < bytes);
 | 
					 | 
				
			||||||
	data_sinfo->bytes_may_use -= bytes;
 | 
					 | 
				
			||||||
	trace_btrfs_space_reservation(root->fs_info, "space_info",
 | 
					 | 
				
			||||||
				      data_sinfo->flags, bytes, 0);
 | 
					 | 
				
			||||||
	spin_unlock(&data_sinfo->lock);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Called if we need to clear a data reservation for this inode
 | 
					 * Called if we need to clear a data reservation for this inode
 | 
				
			||||||
 * Normally in a error case.
 | 
					 * Normally in a error case.
 | 
				
			||||||
| 
						 | 
					@ -4100,7 +4064,7 @@ void btrfs_free_reserved_data_space(struct inode *inode, u64 bytes)
 | 
				
			||||||
 * This one will handle the per-indoe data rsv map for accurate reserved
 | 
					 * This one will handle the per-indoe data rsv map for accurate reserved
 | 
				
			||||||
 * space framework.
 | 
					 * space framework.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void __btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len)
 | 
					void btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct btrfs_root *root = BTRFS_I(inode)->root;
 | 
						struct btrfs_root *root = BTRFS_I(inode)->root;
 | 
				
			||||||
	struct btrfs_space_info *data_sinfo;
 | 
						struct btrfs_space_info *data_sinfo;
 | 
				
			||||||
| 
						 | 
					@ -5715,7 +5679,7 @@ void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * __btrfs_delalloc_reserve_space - reserve data and metadata space for
 | 
					 * btrfs_delalloc_reserve_space - reserve data and metadata space for
 | 
				
			||||||
 * delalloc
 | 
					 * delalloc
 | 
				
			||||||
 * @inode: inode we're writing to
 | 
					 * @inode: inode we're writing to
 | 
				
			||||||
 * @start: start range we are writing to
 | 
					 * @start: start range we are writing to
 | 
				
			||||||
| 
						 | 
					@ -5739,53 +5703,21 @@ void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
 | 
				
			||||||
 * Return 0 for success
 | 
					 * Return 0 for success
 | 
				
			||||||
 * Return <0 for error(-ENOSPC or -EQUOT)
 | 
					 * Return <0 for error(-ENOSPC or -EQUOT)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int __btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len)
 | 
					int btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = __btrfs_check_data_free_space(inode, start, len);
 | 
						ret = btrfs_check_data_free_space(inode, start, len);
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	ret = btrfs_delalloc_reserve_metadata(inode, len);
 | 
						ret = btrfs_delalloc_reserve_metadata(inode, len);
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		__btrfs_free_reserved_data_space(inode, start, len);
 | 
							btrfs_free_reserved_data_space(inode, start, len);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * btrfs_delalloc_reserve_space - reserve data and metadata space for delalloc
 | 
					 * btrfs_delalloc_release_space - release data and metadata space for delalloc
 | 
				
			||||||
 * @inode: inode we're writing to
 | 
					 | 
				
			||||||
 * @num_bytes: the number of bytes we want to allocate
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This will do the following things
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * o reserve space in the data space info for num_bytes
 | 
					 | 
				
			||||||
 * o reserve space in the metadata space info based on number of outstanding
 | 
					 | 
				
			||||||
 *   extents and how much csums will be needed
 | 
					 | 
				
			||||||
 * o add to the inodes ->delalloc_bytes
 | 
					 | 
				
			||||||
 * o add it to the fs_info's delalloc inodes list.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This will return 0 for success and -ENOSPC if there is no space left.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ret = btrfs_check_data_free_space(inode, num_bytes, num_bytes);
 | 
					 | 
				
			||||||
	if (ret)
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ret = btrfs_delalloc_reserve_metadata(inode, num_bytes);
 | 
					 | 
				
			||||||
	if (ret) {
 | 
					 | 
				
			||||||
		btrfs_free_reserved_data_space(inode, num_bytes);
 | 
					 | 
				
			||||||
		return ret;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * __btrfs_delalloc_release_space - release data and metadata space for delalloc
 | 
					 | 
				
			||||||
 * @inode: inode we're releasing space for
 | 
					 * @inode: inode we're releasing space for
 | 
				
			||||||
 * @start: start position of the space already reserved
 | 
					 * @start: start position of the space already reserved
 | 
				
			||||||
 * @len: the len of the space already reserved
 | 
					 * @len: the len of the space already reserved
 | 
				
			||||||
| 
						 | 
					@ -5799,29 +5731,10 @@ int btrfs_delalloc_reserve_space(struct inode *inode, u64 num_bytes)
 | 
				
			||||||
 * list if there are no delalloc bytes left.
 | 
					 * list if there are no delalloc bytes left.
 | 
				
			||||||
 * Also it will handle the qgroup reserved space.
 | 
					 * Also it will handle the qgroup reserved space.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void __btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len)
 | 
					void btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	btrfs_delalloc_release_metadata(inode, len);
 | 
						btrfs_delalloc_release_metadata(inode, len);
 | 
				
			||||||
	__btrfs_free_reserved_data_space(inode, start, len);
 | 
						btrfs_free_reserved_data_space(inode, start, len);
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * btrfs_delalloc_release_space - release data and metadata space for delalloc
 | 
					 | 
				
			||||||
 * @inode: inode we're releasing space for
 | 
					 | 
				
			||||||
 * @num_bytes: the number of bytes we want to free up
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This must be matched with a call to btrfs_delalloc_reserve_space.  This is
 | 
					 | 
				
			||||||
 * called in the case that we don't need the metadata AND data reservations
 | 
					 | 
				
			||||||
 * anymore.  So if there is an error or we insert an inline extent.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This function will release the metadata space that was not used and will
 | 
					 | 
				
			||||||
 * decrement ->delalloc_bytes and remove it from the fs_info delalloc_inodes
 | 
					 | 
				
			||||||
 * list if there are no delalloc bytes left.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
void btrfs_delalloc_release_space(struct inode *inode, u64 num_bytes)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	btrfs_delalloc_release_metadata(inode, num_bytes);
 | 
					 | 
				
			||||||
	btrfs_free_reserved_data_space(inode, num_bytes);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int update_block_group(struct btrfs_trans_handle *trans,
 | 
					static int update_block_group(struct btrfs_trans_handle *trans,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1529,7 +1529,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
 | 
				
			||||||
				goto reserve_metadata;
 | 
									goto reserve_metadata;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ret = __btrfs_check_data_free_space(inode, pos, write_bytes);
 | 
							ret = btrfs_check_data_free_space(inode, pos, write_bytes);
 | 
				
			||||||
		if (ret < 0)
 | 
							if (ret < 0)
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1537,7 +1537,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
 | 
				
			||||||
		ret = btrfs_delalloc_reserve_metadata(inode, reserve_bytes);
 | 
							ret = btrfs_delalloc_reserve_metadata(inode, reserve_bytes);
 | 
				
			||||||
		if (ret) {
 | 
							if (ret) {
 | 
				
			||||||
			if (!only_release_metadata)
 | 
								if (!only_release_metadata)
 | 
				
			||||||
				__btrfs_free_reserved_data_space(inode, pos,
 | 
									btrfs_free_reserved_data_space(inode, pos,
 | 
				
			||||||
							       write_bytes);
 | 
												       write_bytes);
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				btrfs_end_write_no_snapshoting(root);
 | 
									btrfs_end_write_no_snapshoting(root);
 | 
				
			||||||
| 
						 | 
					@ -1608,7 +1608,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
 | 
				
			||||||
				btrfs_delalloc_release_metadata(inode,
 | 
									btrfs_delalloc_release_metadata(inode,
 | 
				
			||||||
								release_bytes);
 | 
													release_bytes);
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				__btrfs_delalloc_release_space(inode, pos,
 | 
									btrfs_delalloc_release_space(inode, pos,
 | 
				
			||||||
							     release_bytes);
 | 
												     release_bytes);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1661,8 +1661,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
 | 
				
			||||||
			btrfs_end_write_no_snapshoting(root);
 | 
								btrfs_end_write_no_snapshoting(root);
 | 
				
			||||||
			btrfs_delalloc_release_metadata(inode, release_bytes);
 | 
								btrfs_delalloc_release_metadata(inode, release_bytes);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			__btrfs_delalloc_release_space(inode, pos,
 | 
								btrfs_delalloc_release_space(inode, pos, release_bytes);
 | 
				
			||||||
						       release_bytes);
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2708,7 +2707,7 @@ static long btrfs_fallocate(struct file *file, int mode,
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	mutex_unlock(&inode->i_mutex);
 | 
						mutex_unlock(&inode->i_mutex);
 | 
				
			||||||
	/* Let go of our reservation. */
 | 
						/* Let go of our reservation. */
 | 
				
			||||||
	__btrfs_free_reserved_data_space(inode, alloc_start,
 | 
						btrfs_free_reserved_data_space(inode, alloc_start,
 | 
				
			||||||
				       alloc_end - alloc_start);
 | 
									       alloc_end - alloc_start);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -488,17 +488,17 @@ int btrfs_save_ino_cache(struct btrfs_root *root,
 | 
				
			||||||
	/* Just to make sure we have enough space */
 | 
						/* Just to make sure we have enough space */
 | 
				
			||||||
	prealloc += 8 * PAGE_CACHE_SIZE;
 | 
						prealloc += 8 * PAGE_CACHE_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = __btrfs_delalloc_reserve_space(inode, 0, prealloc);
 | 
						ret = btrfs_delalloc_reserve_space(inode, 0, prealloc);
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		goto out_put;
 | 
							goto out_put;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = btrfs_prealloc_file_range_trans(inode, trans, 0, 0, prealloc,
 | 
						ret = btrfs_prealloc_file_range_trans(inode, trans, 0, 0, prealloc,
 | 
				
			||||||
					      prealloc, prealloc, &alloc_hint);
 | 
										      prealloc, prealloc, &alloc_hint);
 | 
				
			||||||
	if (ret) {
 | 
						if (ret) {
 | 
				
			||||||
		__btrfs_delalloc_release_space(inode, 0, prealloc);
 | 
							btrfs_delalloc_release_space(inode, 0, prealloc);
 | 
				
			||||||
		goto out_put;
 | 
							goto out_put;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	__btrfs_free_reserved_data_space(inode, 0, prealloc);
 | 
						btrfs_free_reserved_data_space(inode, 0, prealloc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = btrfs_write_out_ino_cache(root, trans, path, inode);
 | 
						ret = btrfs_write_out_ino_cache(root, trans, path, inode);
 | 
				
			||||||
out_put:
 | 
					out_put:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1769,7 +1769,7 @@ static void btrfs_clear_bit_hook(struct inode *inode,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID
 | 
							if (root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID
 | 
				
			||||||
		    && do_list && !(state->state & EXTENT_NORESERVE))
 | 
							    && do_list && !(state->state & EXTENT_NORESERVE))
 | 
				
			||||||
			__btrfs_free_reserved_data_space(inode, state->start,
 | 
								btrfs_free_reserved_data_space(inode, state->start,
 | 
				
			||||||
						       len);
 | 
											       len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		__percpu_counter_add(&root->fs_info->delalloc_bytes, -len,
 | 
							__percpu_counter_add(&root->fs_info->delalloc_bytes, -len,
 | 
				
			||||||
| 
						 | 
					@ -1993,7 +1993,7 @@ static void btrfs_writepage_fixup_worker(struct btrfs_work *work)
 | 
				
			||||||
		goto again;
 | 
							goto again;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = __btrfs_delalloc_reserve_space(inode, page_start,
 | 
						ret = btrfs_delalloc_reserve_space(inode, page_start,
 | 
				
			||||||
					   PAGE_CACHE_SIZE);
 | 
										   PAGE_CACHE_SIZE);
 | 
				
			||||||
	if (ret) {
 | 
						if (ret) {
 | 
				
			||||||
		mapping_set_error(page->mapping, ret);
 | 
							mapping_set_error(page->mapping, ret);
 | 
				
			||||||
| 
						 | 
					@ -4640,7 +4640,7 @@ int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len,
 | 
				
			||||||
	if ((offset & (blocksize - 1)) == 0 &&
 | 
						if ((offset & (blocksize - 1)) == 0 &&
 | 
				
			||||||
	    (!len || ((len & (blocksize - 1)) == 0)))
 | 
						    (!len || ((len & (blocksize - 1)) == 0)))
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
	ret = __btrfs_delalloc_reserve_space(inode,
 | 
						ret = btrfs_delalloc_reserve_space(inode,
 | 
				
			||||||
			round_down(from, PAGE_CACHE_SIZE), PAGE_CACHE_SIZE);
 | 
								round_down(from, PAGE_CACHE_SIZE), PAGE_CACHE_SIZE);
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
| 
						 | 
					@ -4648,7 +4648,7 @@ int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len,
 | 
				
			||||||
again:
 | 
					again:
 | 
				
			||||||
	page = find_or_create_page(mapping, index, mask);
 | 
						page = find_or_create_page(mapping, index, mask);
 | 
				
			||||||
	if (!page) {
 | 
						if (!page) {
 | 
				
			||||||
		__btrfs_delalloc_release_space(inode,
 | 
							btrfs_delalloc_release_space(inode,
 | 
				
			||||||
				round_down(from, PAGE_CACHE_SIZE),
 | 
									round_down(from, PAGE_CACHE_SIZE),
 | 
				
			||||||
				PAGE_CACHE_SIZE);
 | 
									PAGE_CACHE_SIZE);
 | 
				
			||||||
		ret = -ENOMEM;
 | 
							ret = -ENOMEM;
 | 
				
			||||||
| 
						 | 
					@ -4718,7 +4718,7 @@ int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out_unlock:
 | 
					out_unlock:
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		__btrfs_delalloc_release_space(inode, page_start,
 | 
							btrfs_delalloc_release_space(inode, page_start,
 | 
				
			||||||
					     PAGE_CACHE_SIZE);
 | 
										     PAGE_CACHE_SIZE);
 | 
				
			||||||
	unlock_page(page);
 | 
						unlock_page(page);
 | 
				
			||||||
	page_cache_release(page);
 | 
						page_cache_release(page);
 | 
				
			||||||
| 
						 | 
					@ -7650,7 +7650,7 @@ static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock,
 | 
				
			||||||
			spin_unlock(&BTRFS_I(inode)->lock);
 | 
								spin_unlock(&BTRFS_I(inode)->lock);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		__btrfs_free_reserved_data_space(inode, start, len);
 | 
							btrfs_free_reserved_data_space(inode, start, len);
 | 
				
			||||||
		WARN_ON(dio_data->reserve < len);
 | 
							WARN_ON(dio_data->reserve < len);
 | 
				
			||||||
		dio_data->reserve -= len;
 | 
							dio_data->reserve -= len;
 | 
				
			||||||
		current->journal_info = dio_data;
 | 
							current->journal_info = dio_data;
 | 
				
			||||||
| 
						 | 
					@ -8440,7 +8440,7 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
 | 
				
			||||||
			mutex_unlock(&inode->i_mutex);
 | 
								mutex_unlock(&inode->i_mutex);
 | 
				
			||||||
			relock = true;
 | 
								relock = true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		ret = __btrfs_delalloc_reserve_space(inode, offset, count);
 | 
							ret = btrfs_delalloc_reserve_space(inode, offset, count);
 | 
				
			||||||
		if (ret)
 | 
							if (ret)
 | 
				
			||||||
			goto out;
 | 
								goto out;
 | 
				
			||||||
		dio_data.outstanding_extents = div64_u64(count +
 | 
							dio_data.outstanding_extents = div64_u64(count +
 | 
				
			||||||
| 
						 | 
					@ -8469,10 +8469,10 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
 | 
				
			||||||
		current->journal_info = NULL;
 | 
							current->journal_info = NULL;
 | 
				
			||||||
		if (ret < 0 && ret != -EIOCBQUEUED) {
 | 
							if (ret < 0 && ret != -EIOCBQUEUED) {
 | 
				
			||||||
			if (dio_data.reserve)
 | 
								if (dio_data.reserve)
 | 
				
			||||||
				__btrfs_delalloc_release_space(inode, offset,
 | 
									btrfs_delalloc_release_space(inode, offset,
 | 
				
			||||||
							     dio_data.reserve);
 | 
												     dio_data.reserve);
 | 
				
			||||||
		} else if (ret >= 0 && (size_t)ret < count)
 | 
							} else if (ret >= 0 && (size_t)ret < count)
 | 
				
			||||||
			__btrfs_delalloc_release_space(inode, offset,
 | 
								btrfs_delalloc_release_space(inode, offset,
 | 
				
			||||||
						     count - (size_t)ret);
 | 
											     count - (size_t)ret);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
| 
						 | 
					@ -8684,7 +8684,7 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
 | 
				
			||||||
	page_start = page_offset(page);
 | 
						page_start = page_offset(page);
 | 
				
			||||||
	page_end = page_start + PAGE_CACHE_SIZE - 1;
 | 
						page_end = page_start + PAGE_CACHE_SIZE - 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = __btrfs_delalloc_reserve_space(inode, page_start,
 | 
						ret = btrfs_delalloc_reserve_space(inode, page_start,
 | 
				
			||||||
					   PAGE_CACHE_SIZE);
 | 
										   PAGE_CACHE_SIZE);
 | 
				
			||||||
	if (!ret) {
 | 
						if (!ret) {
 | 
				
			||||||
		ret = file_update_time(vma->vm_file);
 | 
							ret = file_update_time(vma->vm_file);
 | 
				
			||||||
| 
						 | 
					@ -8780,7 +8780,7 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	unlock_page(page);
 | 
						unlock_page(page);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	__btrfs_delalloc_release_space(inode, page_start, PAGE_CACHE_SIZE);
 | 
						btrfs_delalloc_release_space(inode, page_start, PAGE_CACHE_SIZE);
 | 
				
			||||||
out_noreserve:
 | 
					out_noreserve:
 | 
				
			||||||
	sb_end_pagefault(inode->i_sb);
 | 
						sb_end_pagefault(inode->i_sb);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1119,7 +1119,7 @@ static int cluster_pages_for_defrag(struct inode *inode,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	page_cnt = min_t(u64, (u64)num_pages, (u64)file_end - start_index + 1);
 | 
						page_cnt = min_t(u64, (u64)num_pages, (u64)file_end - start_index + 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = __btrfs_delalloc_reserve_space(inode,
 | 
						ret = btrfs_delalloc_reserve_space(inode,
 | 
				
			||||||
			start_index << PAGE_CACHE_SHIFT,
 | 
								start_index << PAGE_CACHE_SHIFT,
 | 
				
			||||||
			page_cnt << PAGE_CACHE_SHIFT);
 | 
								page_cnt << PAGE_CACHE_SHIFT);
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
| 
						 | 
					@ -1210,7 +1210,7 @@ static int cluster_pages_for_defrag(struct inode *inode,
 | 
				
			||||||
		spin_lock(&BTRFS_I(inode)->lock);
 | 
							spin_lock(&BTRFS_I(inode)->lock);
 | 
				
			||||||
		BTRFS_I(inode)->outstanding_extents++;
 | 
							BTRFS_I(inode)->outstanding_extents++;
 | 
				
			||||||
		spin_unlock(&BTRFS_I(inode)->lock);
 | 
							spin_unlock(&BTRFS_I(inode)->lock);
 | 
				
			||||||
		__btrfs_delalloc_release_space(inode,
 | 
							btrfs_delalloc_release_space(inode,
 | 
				
			||||||
				start_index << PAGE_CACHE_SHIFT,
 | 
									start_index << PAGE_CACHE_SHIFT,
 | 
				
			||||||
				(page_cnt - i_done) << PAGE_CACHE_SHIFT);
 | 
									(page_cnt - i_done) << PAGE_CACHE_SHIFT);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -1237,7 +1237,7 @@ static int cluster_pages_for_defrag(struct inode *inode,
 | 
				
			||||||
		unlock_page(pages[i]);
 | 
							unlock_page(pages[i]);
 | 
				
			||||||
		page_cache_release(pages[i]);
 | 
							page_cache_release(pages[i]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	__btrfs_delalloc_release_space(inode,
 | 
						btrfs_delalloc_release_space(inode,
 | 
				
			||||||
			start_index << PAGE_CACHE_SHIFT,
 | 
								start_index << PAGE_CACHE_SHIFT,
 | 
				
			||||||
			page_cnt << PAGE_CACHE_SHIFT);
 | 
								page_cnt << PAGE_CACHE_SHIFT);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2035,7 +2035,7 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int btrfs_qgroup_reserve(struct btrfs_root *root, u64 num_bytes)
 | 
					static int qgroup_reserve(struct btrfs_root *root, u64 num_bytes)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct btrfs_root *quota_root;
 | 
						struct btrfs_root *quota_root;
 | 
				
			||||||
	struct btrfs_qgroup *qgroup;
 | 
						struct btrfs_qgroup *qgroup;
 | 
				
			||||||
| 
						 | 
					@ -2168,6 +2168,11 @@ void btrfs_qgroup_free_refroot(struct btrfs_fs_info *fs_info,
 | 
				
			||||||
	spin_unlock(&fs_info->qgroup_lock);
 | 
						spin_unlock(&fs_info->qgroup_lock);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline void qgroup_free(struct btrfs_root *root, u64 num_bytes)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return btrfs_qgroup_free_refroot(root->fs_info, root->objectid,
 | 
				
			||||||
 | 
										 num_bytes);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
void assert_qgroups_uptodate(struct btrfs_trans_handle *trans)
 | 
					void assert_qgroups_uptodate(struct btrfs_trans_handle *trans)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (list_empty(&trans->qgroup_ref_list) && !trans->delayed_ref_elem.seq)
 | 
						if (list_empty(&trans->qgroup_ref_list) && !trans->delayed_ref_elem.seq)
 | 
				
			||||||
| 
						 | 
					@ -2517,7 +2522,7 @@ int btrfs_qgroup_reserve_data(struct inode *inode, u64 start, u64 len)
 | 
				
			||||||
			&changeset);
 | 
								&changeset);
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		goto cleanup;
 | 
							goto cleanup;
 | 
				
			||||||
	ret = btrfs_qgroup_reserve(root, changeset.bytes_changed);
 | 
						ret = qgroup_reserve(root, changeset.bytes_changed);
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		goto cleanup;
 | 
							goto cleanup;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2553,8 +2558,7 @@ static int __btrfs_qgroup_release_data(struct inode *inode, u64 start, u64 len,
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (free)
 | 
						if (free)
 | 
				
			||||||
		btrfs_qgroup_free(BTRFS_I(inode)->root,
 | 
							qgroup_free(BTRFS_I(inode)->root, changeset.bytes_changed);
 | 
				
			||||||
				  changeset.bytes_changed);
 | 
					 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	ulist_free(changeset.range_changed);
 | 
						ulist_free(changeset.range_changed);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
| 
						 | 
					@ -2604,7 +2608,7 @@ int btrfs_qgroup_reserve_meta(struct btrfs_root *root, int num_bytes)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(num_bytes != round_down(num_bytes, root->nodesize));
 | 
						BUG_ON(num_bytes != round_down(num_bytes, root->nodesize));
 | 
				
			||||||
	ret = btrfs_qgroup_reserve(root, num_bytes);
 | 
						ret = qgroup_reserve(root, num_bytes);
 | 
				
			||||||
	if (ret < 0)
 | 
						if (ret < 0)
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
	atomic_add(num_bytes, &root->qgroup_meta_rsv);
 | 
						atomic_add(num_bytes, &root->qgroup_meta_rsv);
 | 
				
			||||||
| 
						 | 
					@ -2621,7 +2625,7 @@ void btrfs_qgroup_free_meta_all(struct btrfs_root *root)
 | 
				
			||||||
	reserved = atomic_xchg(&root->qgroup_meta_rsv, 0);
 | 
						reserved = atomic_xchg(&root->qgroup_meta_rsv, 0);
 | 
				
			||||||
	if (reserved == 0)
 | 
						if (reserved == 0)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	btrfs_qgroup_free(root, reserved);
 | 
						qgroup_free(root, reserved);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes)
 | 
					void btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes)
 | 
				
			||||||
| 
						 | 
					@ -2632,5 +2636,5 @@ void btrfs_qgroup_free_meta(struct btrfs_root *root, int num_bytes)
 | 
				
			||||||
	BUG_ON(num_bytes != round_down(num_bytes, root->nodesize));
 | 
						BUG_ON(num_bytes != round_down(num_bytes, root->nodesize));
 | 
				
			||||||
	WARN_ON(atomic_read(&root->qgroup_meta_rsv) < num_bytes);
 | 
						WARN_ON(atomic_read(&root->qgroup_meta_rsv) < num_bytes);
 | 
				
			||||||
	atomic_sub(num_bytes, &root->qgroup_meta_rsv);
 | 
						atomic_sub(num_bytes, &root->qgroup_meta_rsv);
 | 
				
			||||||
	btrfs_qgroup_free(root, num_bytes);
 | 
						qgroup_free(root, num_bytes);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -71,15 +71,8 @@ int btrfs_run_qgroups(struct btrfs_trans_handle *trans,
 | 
				
			||||||
int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
 | 
					int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
 | 
				
			||||||
			 struct btrfs_fs_info *fs_info, u64 srcid, u64 objectid,
 | 
								 struct btrfs_fs_info *fs_info, u64 srcid, u64 objectid,
 | 
				
			||||||
			 struct btrfs_qgroup_inherit *inherit);
 | 
								 struct btrfs_qgroup_inherit *inherit);
 | 
				
			||||||
int btrfs_qgroup_reserve(struct btrfs_root *root, u64 num_bytes);
 | 
					 | 
				
			||||||
void btrfs_qgroup_free_refroot(struct btrfs_fs_info *fs_info,
 | 
					void btrfs_qgroup_free_refroot(struct btrfs_fs_info *fs_info,
 | 
				
			||||||
			       u64 ref_root, u64 num_bytes);
 | 
								       u64 ref_root, u64 num_bytes);
 | 
				
			||||||
static inline void btrfs_qgroup_free(struct btrfs_root *root, u64 num_bytes)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return btrfs_qgroup_free_refroot(root->fs_info, root->objectid,
 | 
					 | 
				
			||||||
					 num_bytes);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * TODO: Add proper trace point for it, as btrfs_qgroup_free() is
 | 
					 * TODO: Add proper trace point for it, as btrfs_qgroup_free() is
 | 
				
			||||||
 * called by everywhere, can't provide good trace for delayed ref case.
 | 
					 * called by everywhere, can't provide good trace for delayed ref case.
 | 
				
			||||||
| 
						 | 
					@ -89,7 +82,6 @@ static inline void btrfs_qgroup_free_delayed_ref(struct btrfs_fs_info *fs_info,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	btrfs_qgroup_free_refroot(fs_info, ref_root, num_bytes);
 | 
						btrfs_qgroup_free_refroot(fs_info, ref_root, num_bytes);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
void assert_qgroups_uptodate(struct btrfs_trans_handle *trans);
 | 
					void assert_qgroups_uptodate(struct btrfs_trans_handle *trans);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
 | 
					#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3034,7 +3034,7 @@ int prealloc_file_extent_cluster(struct inode *inode,
 | 
				
			||||||
	BUG_ON(cluster->start != cluster->boundary[0]);
 | 
						BUG_ON(cluster->start != cluster->boundary[0]);
 | 
				
			||||||
	mutex_lock(&inode->i_mutex);
 | 
						mutex_lock(&inode->i_mutex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = __btrfs_check_data_free_space(inode, cluster->start,
 | 
						ret = btrfs_check_data_free_space(inode, cluster->start,
 | 
				
			||||||
					  cluster->end + 1 - cluster->start);
 | 
										  cluster->end + 1 - cluster->start);
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
| 
						 | 
					@ -3056,7 +3056,7 @@ int prealloc_file_extent_cluster(struct inode *inode,
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		nr++;
 | 
							nr++;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	__btrfs_free_reserved_data_space(inode, cluster->start,
 | 
						btrfs_free_reserved_data_space(inode, cluster->start,
 | 
				
			||||||
				       cluster->end + 1 - cluster->start);
 | 
									       cluster->end + 1 - cluster->start);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	mutex_unlock(&inode->i_mutex);
 | 
						mutex_unlock(&inode->i_mutex);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue