Lines Matching refs:block_rsv

76 static int block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv,
5227 struct btrfs_block_rsv *block_rsv, in reserve_metadata_bytes() argument
5236 ret = __reserve_metadata_bytes(fs_info, block_rsv->space_info, in reserve_metadata_bytes()
5240 if (block_rsv != global_rsv && in reserve_metadata_bytes()
5246 block_rsv->space_info->flags, in reserve_metadata_bytes()
5250 dump_space_info(fs_info, block_rsv->space_info, in reserve_metadata_bytes()
5261 struct btrfs_block_rsv *block_rsv = NULL; in get_block_rsv() local
5266 block_rsv = trans->block_rsv; in get_block_rsv()
5268 if (!block_rsv) in get_block_rsv()
5269 block_rsv = root->block_rsv; in get_block_rsv()
5271 if (!block_rsv) in get_block_rsv()
5272 block_rsv = &fs_info->empty_block_rsv; in get_block_rsv()
5274 return block_rsv; in get_block_rsv()
5277 static int block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, in block_rsv_use_bytes() argument
5281 spin_lock(&block_rsv->lock); in block_rsv_use_bytes()
5282 if (block_rsv->reserved >= num_bytes) { in block_rsv_use_bytes()
5283 block_rsv->reserved -= num_bytes; in block_rsv_use_bytes()
5284 if (block_rsv->reserved < block_rsv->size) in block_rsv_use_bytes()
5285 block_rsv->full = 0; in block_rsv_use_bytes()
5288 spin_unlock(&block_rsv->lock); in block_rsv_use_bytes()
5292 static void block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv, in block_rsv_add_bytes() argument
5295 spin_lock(&block_rsv->lock); in block_rsv_add_bytes()
5296 block_rsv->reserved += num_bytes; in block_rsv_add_bytes()
5298 block_rsv->size += num_bytes; in block_rsv_add_bytes()
5299 else if (block_rsv->reserved >= block_rsv->size) in block_rsv_add_bytes()
5300 block_rsv->full = 1; in block_rsv_add_bytes()
5301 spin_unlock(&block_rsv->lock); in block_rsv_add_bytes()
5431 struct btrfs_block_rsv *block_rsv, in block_rsv_release_bytes() argument
5435 struct btrfs_space_info *space_info = block_rsv->space_info; in block_rsv_release_bytes()
5439 spin_lock(&block_rsv->lock); in block_rsv_release_bytes()
5441 num_bytes = block_rsv->size; in block_rsv_release_bytes()
5442 qgroup_to_release = block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
5444 block_rsv->size -= num_bytes; in block_rsv_release_bytes()
5445 if (block_rsv->reserved >= block_rsv->size) { in block_rsv_release_bytes()
5446 num_bytes = block_rsv->reserved - block_rsv->size; in block_rsv_release_bytes()
5447 block_rsv->reserved = block_rsv->size; in block_rsv_release_bytes()
5448 block_rsv->full = 1; in block_rsv_release_bytes()
5452 if (block_rsv->qgroup_rsv_reserved >= block_rsv->qgroup_rsv_size) { in block_rsv_release_bytes()
5453 qgroup_to_release = block_rsv->qgroup_rsv_reserved - in block_rsv_release_bytes()
5454 block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
5455 block_rsv->qgroup_rsv_reserved = block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
5459 spin_unlock(&block_rsv->lock); in block_rsv_release_bytes()
5519 struct btrfs_block_rsv *block_rsv; in btrfs_alloc_block_rsv() local
5521 block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS); in btrfs_alloc_block_rsv()
5522 if (!block_rsv) in btrfs_alloc_block_rsv()
5525 btrfs_init_metadata_block_rsv(fs_info, block_rsv, type); in btrfs_alloc_block_rsv()
5526 return block_rsv; in btrfs_alloc_block_rsv()
5539 struct btrfs_block_rsv *block_rsv, u64 num_bytes, in btrfs_block_rsv_add() argument
5547 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_add()
5549 block_rsv_add_bytes(block_rsv, num_bytes, 1); in btrfs_block_rsv_add()
5556 int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_factor) in btrfs_block_rsv_check() argument
5561 if (!block_rsv) in btrfs_block_rsv_check()
5564 spin_lock(&block_rsv->lock); in btrfs_block_rsv_check()
5565 num_bytes = div_factor(block_rsv->size, min_factor); in btrfs_block_rsv_check()
5566 if (block_rsv->reserved >= num_bytes) in btrfs_block_rsv_check()
5568 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_check()
5574 struct btrfs_block_rsv *block_rsv, u64 min_reserved, in btrfs_block_rsv_refill() argument
5580 if (!block_rsv) in btrfs_block_rsv_refill()
5583 spin_lock(&block_rsv->lock); in btrfs_block_rsv_refill()
5585 if (block_rsv->reserved >= num_bytes) in btrfs_block_rsv_refill()
5588 num_bytes -= block_rsv->reserved; in btrfs_block_rsv_refill()
5589 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_refill()
5594 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_refill()
5596 block_rsv_add_bytes(block_rsv, num_bytes, 0); in btrfs_block_rsv_refill()
5617 struct btrfs_block_rsv *block_rsv = &inode->block_rsv; in btrfs_inode_rsv_refill() local
5622 spin_lock(&block_rsv->lock); in btrfs_inode_rsv_refill()
5623 if (block_rsv->reserved < block_rsv->size) in btrfs_inode_rsv_refill()
5624 num_bytes = block_rsv->size - block_rsv->reserved; in btrfs_inode_rsv_refill()
5625 if (block_rsv->qgroup_rsv_reserved < block_rsv->qgroup_rsv_size) in btrfs_inode_rsv_refill()
5626 qgroup_num_bytes = block_rsv->qgroup_rsv_size - in btrfs_inode_rsv_refill()
5627 block_rsv->qgroup_rsv_reserved; in btrfs_inode_rsv_refill()
5628 spin_unlock(&block_rsv->lock); in btrfs_inode_rsv_refill()
5636 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_inode_rsv_refill()
5638 block_rsv_add_bytes(block_rsv, num_bytes, 0); in btrfs_inode_rsv_refill()
5643 spin_lock(&block_rsv->lock); in btrfs_inode_rsv_refill()
5644 block_rsv->qgroup_rsv_reserved += qgroup_num_bytes; in btrfs_inode_rsv_refill()
5645 spin_unlock(&block_rsv->lock); in btrfs_inode_rsv_refill()
5666 struct btrfs_block_rsv *block_rsv = &inode->block_rsv; in btrfs_inode_rsv_release() local
5675 released = block_rsv_release_bytes(fs_info, block_rsv, global_rsv, 0, in btrfs_inode_rsv_release()
5688 struct btrfs_block_rsv *block_rsv, in btrfs_block_rsv_release() argument
5693 if (global_rsv == block_rsv || in btrfs_block_rsv_release()
5694 block_rsv->space_info != global_rsv->space_info) in btrfs_block_rsv_release()
5696 block_rsv_release_bytes(fs_info, block_rsv, global_rsv, num_bytes, NULL); in btrfs_block_rsv_release()
5701 struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv; in update_global_block_rsv() local
5702 struct btrfs_space_info *sinfo = block_rsv->space_info; in update_global_block_rsv()
5716 spin_lock(&block_rsv->lock); in update_global_block_rsv()
5718 block_rsv->size = min_t(u64, num_bytes, SZ_512M); in update_global_block_rsv()
5720 if (block_rsv->reserved < block_rsv->size) { in update_global_block_rsv()
5725 block_rsv->size - block_rsv->reserved); in update_global_block_rsv()
5726 block_rsv->reserved += num_bytes; in update_global_block_rsv()
5732 } else if (block_rsv->reserved > block_rsv->size) { in update_global_block_rsv()
5733 num_bytes = block_rsv->reserved - block_rsv->size; in update_global_block_rsv()
5737 block_rsv->reserved = block_rsv->size; in update_global_block_rsv()
5740 if (block_rsv->reserved == block_rsv->size) in update_global_block_rsv()
5741 block_rsv->full = 1; in update_global_block_rsv()
5743 block_rsv->full = 0; in update_global_block_rsv()
5745 spin_unlock(&block_rsv->lock); in update_global_block_rsv()
5762 fs_info->extent_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5763 fs_info->csum_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5764 fs_info->dev_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5765 fs_info->tree_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5767 fs_info->quota_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5768 fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv; in init_global_block_rsv()
5861 struct btrfs_block_rsv *block_rsv = &inode->block_rsv; in btrfs_calculate_inode_block_rsv_size() local
5884 spin_lock(&block_rsv->lock); in btrfs_calculate_inode_block_rsv_size()
5885 block_rsv->size = reserve_size; in btrfs_calculate_inode_block_rsv_size()
5886 block_rsv->qgroup_rsv_size = qgroup_rsv_size; in btrfs_calculate_inode_block_rsv_size()
5887 spin_unlock(&block_rsv->lock); in btrfs_calculate_inode_block_rsv_size()
8192 struct btrfs_block_rsv *block_rsv; in use_block_rsv() local
8197 block_rsv = get_block_rsv(trans, root); in use_block_rsv()
8199 if (unlikely(block_rsv->size == 0)) in use_block_rsv()
8202 ret = block_rsv_use_bytes(block_rsv, blocksize); in use_block_rsv()
8204 return block_rsv; in use_block_rsv()
8206 if (block_rsv->failfast) in use_block_rsv()
8209 if (block_rsv->type == BTRFS_BLOCK_RSV_GLOBAL && !global_updated) { in use_block_rsv()
8224 ret = reserve_metadata_bytes(root, block_rsv, blocksize, in use_block_rsv()
8227 return block_rsv; in use_block_rsv()
8233 if (block_rsv->type != BTRFS_BLOCK_RSV_GLOBAL && in use_block_rsv()
8234 block_rsv->space_info == global_rsv->space_info) { in use_block_rsv()
8243 struct btrfs_block_rsv *block_rsv, u32 blocksize) in unuse_block_rsv() argument
8245 block_rsv_add_bytes(block_rsv, blocksize, 0); in unuse_block_rsv()
8246 block_rsv_release_bytes(fs_info, block_rsv, NULL, 0, NULL); in unuse_block_rsv()
8262 struct btrfs_block_rsv *block_rsv; in btrfs_alloc_tree_block() local
8280 block_rsv = use_block_rsv(trans, root, blocksize); in btrfs_alloc_tree_block()
8281 if (IS_ERR(block_rsv)) in btrfs_alloc_tree_block()
8282 return ERR_CAST(block_rsv); in btrfs_alloc_tree_block()
8340 unuse_block_rsv(fs_info, block_rsv, blocksize); in btrfs_alloc_tree_block()
8897 struct btrfs_block_rsv *block_rsv, int update_ref, in btrfs_drop_snapshot() argument
8937 if (block_rsv) in btrfs_drop_snapshot()
8938 trans->block_rsv = block_rsv; in btrfs_drop_snapshot()
9055 if (block_rsv) in btrfs_drop_snapshot()
9056 trans->block_rsv = block_rsv; in btrfs_drop_snapshot()