Lines Matching refs:block_rsv
109 static int block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv,
4558 struct btrfs_block_rsv *block_rsv; in shrink_delalloc() local
4574 block_rsv = &root->fs_info->delalloc_block_rsv; in shrink_delalloc()
4575 space_info = block_rsv->space_info; in shrink_delalloc()
4872 struct btrfs_block_rsv *block_rsv, in reserve_metadata_bytes() argument
4876 struct btrfs_space_info *space_info = block_rsv->space_info; in reserve_metadata_bytes()
5010 if (block_rsv != global_rsv && in reserve_metadata_bytes()
5031 struct btrfs_block_rsv *block_rsv = NULL; in get_block_rsv() local
5036 block_rsv = trans->block_rsv; in get_block_rsv()
5038 if (!block_rsv) in get_block_rsv()
5039 block_rsv = root->block_rsv; in get_block_rsv()
5041 if (!block_rsv) in get_block_rsv()
5042 block_rsv = &root->fs_info->empty_block_rsv; in get_block_rsv()
5044 return block_rsv; in get_block_rsv()
5047 static int block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, in block_rsv_use_bytes() argument
5051 spin_lock(&block_rsv->lock); in block_rsv_use_bytes()
5052 if (block_rsv->reserved >= num_bytes) { in block_rsv_use_bytes()
5053 block_rsv->reserved -= num_bytes; in block_rsv_use_bytes()
5054 if (block_rsv->reserved < block_rsv->size) in block_rsv_use_bytes()
5055 block_rsv->full = 0; in block_rsv_use_bytes()
5058 spin_unlock(&block_rsv->lock); in block_rsv_use_bytes()
5062 static void block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv, in block_rsv_add_bytes() argument
5065 spin_lock(&block_rsv->lock); in block_rsv_add_bytes()
5066 block_rsv->reserved += num_bytes; in block_rsv_add_bytes()
5068 block_rsv->size += num_bytes; in block_rsv_add_bytes()
5069 else if (block_rsv->reserved >= block_rsv->size) in block_rsv_add_bytes()
5070 block_rsv->full = 1; in block_rsv_add_bytes()
5071 spin_unlock(&block_rsv->lock); in block_rsv_add_bytes()
5100 struct btrfs_block_rsv *block_rsv, in block_rsv_release_bytes() argument
5103 struct btrfs_space_info *space_info = block_rsv->space_info; in block_rsv_release_bytes()
5105 spin_lock(&block_rsv->lock); in block_rsv_release_bytes()
5107 num_bytes = block_rsv->size; in block_rsv_release_bytes()
5108 block_rsv->size -= num_bytes; in block_rsv_release_bytes()
5109 if (block_rsv->reserved >= block_rsv->size) { in block_rsv_release_bytes()
5110 num_bytes = block_rsv->reserved - block_rsv->size; in block_rsv_release_bytes()
5111 block_rsv->reserved = block_rsv->size; in block_rsv_release_bytes()
5112 block_rsv->full = 1; in block_rsv_release_bytes()
5116 spin_unlock(&block_rsv->lock); in block_rsv_release_bytes()
5166 struct btrfs_block_rsv *block_rsv; in btrfs_alloc_block_rsv() local
5169 block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS); in btrfs_alloc_block_rsv()
5170 if (!block_rsv) in btrfs_alloc_block_rsv()
5173 btrfs_init_block_rsv(block_rsv, type); in btrfs_alloc_block_rsv()
5174 block_rsv->space_info = __find_space_info(fs_info, in btrfs_alloc_block_rsv()
5176 return block_rsv; in btrfs_alloc_block_rsv()
5194 struct btrfs_block_rsv *block_rsv, u64 num_bytes, in btrfs_block_rsv_add() argument
5202 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_add()
5204 block_rsv_add_bytes(block_rsv, num_bytes, 1); in btrfs_block_rsv_add()
5212 struct btrfs_block_rsv *block_rsv, int min_factor) in btrfs_block_rsv_check() argument
5217 if (!block_rsv) in btrfs_block_rsv_check()
5220 spin_lock(&block_rsv->lock); in btrfs_block_rsv_check()
5221 num_bytes = div_factor(block_rsv->size, min_factor); in btrfs_block_rsv_check()
5222 if (block_rsv->reserved >= num_bytes) in btrfs_block_rsv_check()
5224 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_check()
5230 struct btrfs_block_rsv *block_rsv, u64 min_reserved, in btrfs_block_rsv_refill() argument
5236 if (!block_rsv) in btrfs_block_rsv_refill()
5239 spin_lock(&block_rsv->lock); in btrfs_block_rsv_refill()
5241 if (block_rsv->reserved >= num_bytes) in btrfs_block_rsv_refill()
5244 num_bytes -= block_rsv->reserved; in btrfs_block_rsv_refill()
5245 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_refill()
5250 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_refill()
5252 block_rsv_add_bytes(block_rsv, num_bytes, 0); in btrfs_block_rsv_refill()
5267 struct btrfs_block_rsv *block_rsv, in btrfs_block_rsv_release() argument
5271 if (global_rsv == block_rsv || in btrfs_block_rsv_release()
5272 block_rsv->space_info != global_rsv->space_info) in btrfs_block_rsv_release()
5274 block_rsv_release_bytes(root->fs_info, block_rsv, global_rsv, in btrfs_block_rsv_release()
5315 struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv; in update_global_block_rsv() local
5316 struct btrfs_space_info *sinfo = block_rsv->space_info; in update_global_block_rsv()
5322 spin_lock(&block_rsv->lock); in update_global_block_rsv()
5324 block_rsv->size = min_t(u64, num_bytes, 512 * 1024 * 1024); in update_global_block_rsv()
5332 block_rsv->reserved += num_bytes; in update_global_block_rsv()
5338 if (block_rsv->reserved >= block_rsv->size) { in update_global_block_rsv()
5339 num_bytes = block_rsv->reserved - block_rsv->size; in update_global_block_rsv()
5343 block_rsv->reserved = block_rsv->size; in update_global_block_rsv()
5344 block_rsv->full = 1; in update_global_block_rsv()
5347 spin_unlock(&block_rsv->lock); in update_global_block_rsv()
5365 fs_info->extent_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5366 fs_info->csum_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5367 fs_info->dev_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5368 fs_info->tree_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5370 fs_info->quota_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5371 fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv; in init_global_block_rsv()
5393 if (!trans->block_rsv) in btrfs_trans_release_metadata()
5401 btrfs_block_rsv_release(root, trans->block_rsv, trans->bytes_reserved); in btrfs_trans_release_metadata()
5600 struct btrfs_block_rsv *block_rsv = &root->fs_info->delalloc_block_rsv; in btrfs_delalloc_reserve_metadata() local
5664 ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush); in btrfs_delalloc_reserve_metadata()
5685 block_rsv_add_bytes(block_rsv, to_reserve, 1); in btrfs_delalloc_reserve_metadata()
5744 btrfs_block_rsv_release(root, block_rsv, to_free); in btrfs_delalloc_reserve_metadata()
7868 struct btrfs_block_rsv *block_rsv; in use_block_rsv() local
7873 block_rsv = get_block_rsv(trans, root); in use_block_rsv()
7875 if (unlikely(block_rsv->size == 0)) in use_block_rsv()
7878 ret = block_rsv_use_bytes(block_rsv, blocksize); in use_block_rsv()
7880 return block_rsv; in use_block_rsv()
7882 if (block_rsv->failfast) in use_block_rsv()
7885 if (block_rsv->type == BTRFS_BLOCK_RSV_GLOBAL && !global_updated) { in use_block_rsv()
7900 ret = reserve_metadata_bytes(root, block_rsv, blocksize, in use_block_rsv()
7903 return block_rsv; in use_block_rsv()
7909 if (block_rsv->type != BTRFS_BLOCK_RSV_GLOBAL && in use_block_rsv()
7910 block_rsv->space_info == global_rsv->space_info) { in use_block_rsv()
7919 struct btrfs_block_rsv *block_rsv, u32 blocksize) in unuse_block_rsv() argument
7921 block_rsv_add_bytes(block_rsv, blocksize, 0); in unuse_block_rsv()
7922 block_rsv_release_bytes(fs_info, block_rsv, NULL, 0); in unuse_block_rsv()
7936 struct btrfs_block_rsv *block_rsv; in btrfs_alloc_tree_block() local
7953 block_rsv = use_block_rsv(trans, root, blocksize); in btrfs_alloc_tree_block()
7954 if (IS_ERR(block_rsv)) in btrfs_alloc_tree_block()
7955 return ERR_CAST(block_rsv); in btrfs_alloc_tree_block()
8011 unuse_block_rsv(root->fs_info, block_rsv, blocksize); in btrfs_alloc_tree_block()
8782 struct btrfs_block_rsv *block_rsv, int update_ref, in btrfs_drop_snapshot() argument
8817 if (block_rsv) in btrfs_drop_snapshot()
8818 trans->block_rsv = block_rsv; in btrfs_drop_snapshot()
8935 if (block_rsv) in btrfs_drop_snapshot()
8936 trans->block_rsv = block_rsv; in btrfs_drop_snapshot()