Lines Matching refs:block_rsv

76 static int block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv,
5221 struct btrfs_block_rsv *block_rsv, in reserve_metadata_bytes() argument
5230 ret = __reserve_metadata_bytes(fs_info, block_rsv->space_info, in reserve_metadata_bytes()
5234 if (block_rsv != global_rsv && in reserve_metadata_bytes()
5240 block_rsv->space_info->flags, in reserve_metadata_bytes()
5244 dump_space_info(fs_info, block_rsv->space_info, in reserve_metadata_bytes()
5255 struct btrfs_block_rsv *block_rsv = NULL; in get_block_rsv() local
5260 block_rsv = trans->block_rsv; in get_block_rsv()
5262 if (!block_rsv) in get_block_rsv()
5263 block_rsv = root->block_rsv; in get_block_rsv()
5265 if (!block_rsv) in get_block_rsv()
5266 block_rsv = &fs_info->empty_block_rsv; in get_block_rsv()
5268 return block_rsv; in get_block_rsv()
5271 static int block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, in block_rsv_use_bytes() argument
5275 spin_lock(&block_rsv->lock); in block_rsv_use_bytes()
5276 if (block_rsv->reserved >= num_bytes) { in block_rsv_use_bytes()
5277 block_rsv->reserved -= num_bytes; in block_rsv_use_bytes()
5278 if (block_rsv->reserved < block_rsv->size) in block_rsv_use_bytes()
5279 block_rsv->full = 0; in block_rsv_use_bytes()
5282 spin_unlock(&block_rsv->lock); in block_rsv_use_bytes()
5286 static void block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv, in block_rsv_add_bytes() argument
5289 spin_lock(&block_rsv->lock); in block_rsv_add_bytes()
5290 block_rsv->reserved += num_bytes; in block_rsv_add_bytes()
5292 block_rsv->size += num_bytes; in block_rsv_add_bytes()
5293 else if (block_rsv->reserved >= block_rsv->size) in block_rsv_add_bytes()
5294 block_rsv->full = 1; in block_rsv_add_bytes()
5295 spin_unlock(&block_rsv->lock); in block_rsv_add_bytes()
5425 struct btrfs_block_rsv *block_rsv, in block_rsv_release_bytes() argument
5429 struct btrfs_space_info *space_info = block_rsv->space_info; in block_rsv_release_bytes()
5433 spin_lock(&block_rsv->lock); in block_rsv_release_bytes()
5435 num_bytes = block_rsv->size; in block_rsv_release_bytes()
5436 qgroup_to_release = block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
5438 block_rsv->size -= num_bytes; in block_rsv_release_bytes()
5439 if (block_rsv->reserved >= block_rsv->size) { in block_rsv_release_bytes()
5440 num_bytes = block_rsv->reserved - block_rsv->size; in block_rsv_release_bytes()
5441 block_rsv->reserved = block_rsv->size; in block_rsv_release_bytes()
5442 block_rsv->full = 1; in block_rsv_release_bytes()
5446 if (block_rsv->qgroup_rsv_reserved >= block_rsv->qgroup_rsv_size) { in block_rsv_release_bytes()
5447 qgroup_to_release = block_rsv->qgroup_rsv_reserved - in block_rsv_release_bytes()
5448 block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
5449 block_rsv->qgroup_rsv_reserved = block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
5453 spin_unlock(&block_rsv->lock); in block_rsv_release_bytes()
5513 struct btrfs_block_rsv *block_rsv; in btrfs_alloc_block_rsv() local
5515 block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS); in btrfs_alloc_block_rsv()
5516 if (!block_rsv) in btrfs_alloc_block_rsv()
5519 btrfs_init_metadata_block_rsv(fs_info, block_rsv, type); in btrfs_alloc_block_rsv()
5520 return block_rsv; in btrfs_alloc_block_rsv()
5533 struct btrfs_block_rsv *block_rsv, u64 num_bytes, in btrfs_block_rsv_add() argument
5541 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_add()
5543 block_rsv_add_bytes(block_rsv, num_bytes, 1); in btrfs_block_rsv_add()
5550 int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_factor) in btrfs_block_rsv_check() argument
5555 if (!block_rsv) in btrfs_block_rsv_check()
5558 spin_lock(&block_rsv->lock); in btrfs_block_rsv_check()
5559 num_bytes = div_factor(block_rsv->size, min_factor); in btrfs_block_rsv_check()
5560 if (block_rsv->reserved >= num_bytes) in btrfs_block_rsv_check()
5562 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_check()
5568 struct btrfs_block_rsv *block_rsv, u64 min_reserved, in btrfs_block_rsv_refill() argument
5574 if (!block_rsv) in btrfs_block_rsv_refill()
5577 spin_lock(&block_rsv->lock); in btrfs_block_rsv_refill()
5579 if (block_rsv->reserved >= num_bytes) in btrfs_block_rsv_refill()
5582 num_bytes -= block_rsv->reserved; in btrfs_block_rsv_refill()
5583 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_refill()
5588 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_refill()
5590 block_rsv_add_bytes(block_rsv, num_bytes, 0); in btrfs_block_rsv_refill()
5611 struct btrfs_block_rsv *block_rsv = &inode->block_rsv; in btrfs_inode_rsv_refill() local
5616 spin_lock(&block_rsv->lock); in btrfs_inode_rsv_refill()
5617 if (block_rsv->reserved < block_rsv->size) in btrfs_inode_rsv_refill()
5618 num_bytes = block_rsv->size - block_rsv->reserved; in btrfs_inode_rsv_refill()
5619 if (block_rsv->qgroup_rsv_reserved < block_rsv->qgroup_rsv_size) in btrfs_inode_rsv_refill()
5620 qgroup_num_bytes = block_rsv->qgroup_rsv_size - in btrfs_inode_rsv_refill()
5621 block_rsv->qgroup_rsv_reserved; in btrfs_inode_rsv_refill()
5622 spin_unlock(&block_rsv->lock); in btrfs_inode_rsv_refill()
5630 ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_inode_rsv_refill()
5632 block_rsv_add_bytes(block_rsv, num_bytes, 0); in btrfs_inode_rsv_refill()
5637 spin_lock(&block_rsv->lock); in btrfs_inode_rsv_refill()
5638 block_rsv->qgroup_rsv_reserved += qgroup_num_bytes; in btrfs_inode_rsv_refill()
5639 spin_unlock(&block_rsv->lock); in btrfs_inode_rsv_refill()
5660 struct btrfs_block_rsv *block_rsv = &inode->block_rsv; in btrfs_inode_rsv_release() local
5669 released = block_rsv_release_bytes(fs_info, block_rsv, global_rsv, 0, in btrfs_inode_rsv_release()
5682 struct btrfs_block_rsv *block_rsv, in btrfs_block_rsv_release() argument
5687 if (global_rsv == block_rsv || in btrfs_block_rsv_release()
5688 block_rsv->space_info != global_rsv->space_info) in btrfs_block_rsv_release()
5690 block_rsv_release_bytes(fs_info, block_rsv, global_rsv, num_bytes, NULL); in btrfs_block_rsv_release()
5695 struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv; in update_global_block_rsv() local
5696 struct btrfs_space_info *sinfo = block_rsv->space_info; in update_global_block_rsv()
5710 spin_lock(&block_rsv->lock); in update_global_block_rsv()
5712 block_rsv->size = min_t(u64, num_bytes, SZ_512M); in update_global_block_rsv()
5714 if (block_rsv->reserved < block_rsv->size) { in update_global_block_rsv()
5719 block_rsv->size - block_rsv->reserved); in update_global_block_rsv()
5720 block_rsv->reserved += num_bytes; in update_global_block_rsv()
5726 } else if (block_rsv->reserved > block_rsv->size) { in update_global_block_rsv()
5727 num_bytes = block_rsv->reserved - block_rsv->size; in update_global_block_rsv()
5731 block_rsv->reserved = block_rsv->size; in update_global_block_rsv()
5734 if (block_rsv->reserved == block_rsv->size) in update_global_block_rsv()
5735 block_rsv->full = 1; in update_global_block_rsv()
5737 block_rsv->full = 0; in update_global_block_rsv()
5739 spin_unlock(&block_rsv->lock); in update_global_block_rsv()
5756 fs_info->extent_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5757 fs_info->csum_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5758 fs_info->dev_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5759 fs_info->tree_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5761 fs_info->quota_root->block_rsv = &fs_info->global_block_rsv; in init_global_block_rsv()
5762 fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv; in init_global_block_rsv()
5855 struct btrfs_block_rsv *block_rsv = &inode->block_rsv; in btrfs_calculate_inode_block_rsv_size() local
5878 spin_lock(&block_rsv->lock); in btrfs_calculate_inode_block_rsv_size()
5879 block_rsv->size = reserve_size; in btrfs_calculate_inode_block_rsv_size()
5880 block_rsv->qgroup_rsv_size = qgroup_rsv_size; in btrfs_calculate_inode_block_rsv_size()
5881 spin_unlock(&block_rsv->lock); in btrfs_calculate_inode_block_rsv_size()
8165 struct btrfs_block_rsv *block_rsv; in use_block_rsv() local
8170 block_rsv = get_block_rsv(trans, root); in use_block_rsv()
8172 if (unlikely(block_rsv->size == 0)) in use_block_rsv()
8175 ret = block_rsv_use_bytes(block_rsv, blocksize); in use_block_rsv()
8177 return block_rsv; in use_block_rsv()
8179 if (block_rsv->failfast) in use_block_rsv()
8182 if (block_rsv->type == BTRFS_BLOCK_RSV_GLOBAL && !global_updated) { in use_block_rsv()
8197 ret = reserve_metadata_bytes(root, block_rsv, blocksize, in use_block_rsv()
8200 return block_rsv; in use_block_rsv()
8206 if (block_rsv->type != BTRFS_BLOCK_RSV_GLOBAL && in use_block_rsv()
8207 block_rsv->space_info == global_rsv->space_info) { in use_block_rsv()
8216 struct btrfs_block_rsv *block_rsv, u32 blocksize) in unuse_block_rsv() argument
8218 block_rsv_add_bytes(block_rsv, blocksize, 0); in unuse_block_rsv()
8219 block_rsv_release_bytes(fs_info, block_rsv, NULL, 0, NULL); in unuse_block_rsv()
8235 struct btrfs_block_rsv *block_rsv; in btrfs_alloc_tree_block() local
8253 block_rsv = use_block_rsv(trans, root, blocksize); in btrfs_alloc_tree_block()
8254 if (IS_ERR(block_rsv)) in btrfs_alloc_tree_block()
8255 return ERR_CAST(block_rsv); in btrfs_alloc_tree_block()
8312 unuse_block_rsv(fs_info, block_rsv, blocksize); in btrfs_alloc_tree_block()
8863 struct btrfs_block_rsv *block_rsv, int update_ref, in btrfs_drop_snapshot() argument
8899 if (block_rsv) in btrfs_drop_snapshot()
8900 trans->block_rsv = block_rsv; in btrfs_drop_snapshot()
9017 if (block_rsv) in btrfs_drop_snapshot()
9018 trans->block_rsv = block_rsv; in btrfs_drop_snapshot()