Lines Matching refs:block_rsv

103 				    struct btrfs_block_rsv *block_rsv,  in block_rsv_release_bytes()  argument
107 struct btrfs_space_info *space_info = block_rsv->space_info; in block_rsv_release_bytes()
111 spin_lock(&block_rsv->lock); in block_rsv_release_bytes()
113 num_bytes = block_rsv->size; in block_rsv_release_bytes()
114 qgroup_to_release = block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
116 block_rsv->size -= num_bytes; in block_rsv_release_bytes()
117 if (block_rsv->reserved >= block_rsv->size) { in block_rsv_release_bytes()
118 num_bytes = block_rsv->reserved - block_rsv->size; in block_rsv_release_bytes()
119 block_rsv->reserved = block_rsv->size; in block_rsv_release_bytes()
120 block_rsv->full = 1; in block_rsv_release_bytes()
124 if (block_rsv->qgroup_rsv_reserved >= block_rsv->qgroup_rsv_size) { in block_rsv_release_bytes()
125 qgroup_to_release = block_rsv->qgroup_rsv_reserved - in block_rsv_release_bytes()
126 block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
127 block_rsv->qgroup_rsv_reserved = block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
131 spin_unlock(&block_rsv->lock); in block_rsv_release_bytes()
192 struct btrfs_block_rsv *block_rsv; in btrfs_alloc_block_rsv() local
194 block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS); in btrfs_alloc_block_rsv()
195 if (!block_rsv) in btrfs_alloc_block_rsv()
198 btrfs_init_metadata_block_rsv(fs_info, block_rsv, type); in btrfs_alloc_block_rsv()
199 return block_rsv; in btrfs_alloc_block_rsv()
212 struct btrfs_block_rsv *block_rsv, u64 num_bytes, in btrfs_block_rsv_add() argument
220 ret = btrfs_reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_add()
222 btrfs_block_rsv_add_bytes(block_rsv, num_bytes, true); in btrfs_block_rsv_add()
227 int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_factor) in btrfs_block_rsv_check() argument
232 if (!block_rsv) in btrfs_block_rsv_check()
235 spin_lock(&block_rsv->lock); in btrfs_block_rsv_check()
236 num_bytes = div_factor(block_rsv->size, min_factor); in btrfs_block_rsv_check()
237 if (block_rsv->reserved >= num_bytes) in btrfs_block_rsv_check()
239 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_check()
245 struct btrfs_block_rsv *block_rsv, u64 min_reserved, in btrfs_block_rsv_refill() argument
251 if (!block_rsv) in btrfs_block_rsv_refill()
254 spin_lock(&block_rsv->lock); in btrfs_block_rsv_refill()
256 if (block_rsv->reserved >= num_bytes) in btrfs_block_rsv_refill()
259 num_bytes -= block_rsv->reserved; in btrfs_block_rsv_refill()
260 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_refill()
265 ret = btrfs_reserve_metadata_bytes(root, block_rsv, num_bytes, flush); in btrfs_block_rsv_refill()
267 btrfs_block_rsv_add_bytes(block_rsv, num_bytes, false); in btrfs_block_rsv_refill()
275 struct btrfs_block_rsv *block_rsv, u64 num_bytes, in btrfs_block_rsv_release() argument
286 if (block_rsv == delayed_rsv) in btrfs_block_rsv_release()
288 else if (block_rsv != global_rsv && !delayed_rsv->full) in btrfs_block_rsv_release()
291 if (target && block_rsv->space_info != target->space_info) in btrfs_block_rsv_release()
294 return block_rsv_release_bytes(fs_info, block_rsv, target, num_bytes, in btrfs_block_rsv_release()
298 int btrfs_block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, u64 num_bytes) in btrfs_block_rsv_use_bytes() argument
302 spin_lock(&block_rsv->lock); in btrfs_block_rsv_use_bytes()
303 if (block_rsv->reserved >= num_bytes) { in btrfs_block_rsv_use_bytes()
304 block_rsv->reserved -= num_bytes; in btrfs_block_rsv_use_bytes()
305 if (block_rsv->reserved < block_rsv->size) in btrfs_block_rsv_use_bytes()
306 block_rsv->full = 0; in btrfs_block_rsv_use_bytes()
309 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_use_bytes()
313 void btrfs_block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv, in btrfs_block_rsv_add_bytes() argument
316 spin_lock(&block_rsv->lock); in btrfs_block_rsv_add_bytes()
317 block_rsv->reserved += num_bytes; in btrfs_block_rsv_add_bytes()
319 block_rsv->size += num_bytes; in btrfs_block_rsv_add_bytes()
320 else if (block_rsv->reserved >= block_rsv->size) in btrfs_block_rsv_add_bytes()
321 block_rsv->full = 1; in btrfs_block_rsv_add_bytes()
322 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_add_bytes()
352 struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv; in btrfs_update_global_block_rsv() local
353 struct btrfs_space_info *sinfo = block_rsv->space_info; in btrfs_update_global_block_rsv()
387 spin_lock(&block_rsv->lock); in btrfs_update_global_block_rsv()
389 block_rsv->size = min_t(u64, num_bytes, SZ_512M); in btrfs_update_global_block_rsv()
391 if (block_rsv->reserved < block_rsv->size) { in btrfs_update_global_block_rsv()
392 num_bytes = block_rsv->size - block_rsv->reserved; in btrfs_update_global_block_rsv()
395 block_rsv->reserved = block_rsv->size; in btrfs_update_global_block_rsv()
396 } else if (block_rsv->reserved > block_rsv->size) { in btrfs_update_global_block_rsv()
397 num_bytes = block_rsv->reserved - block_rsv->size; in btrfs_update_global_block_rsv()
400 block_rsv->reserved = block_rsv->size; in btrfs_update_global_block_rsv()
404 if (block_rsv->reserved == block_rsv->size) in btrfs_update_global_block_rsv()
405 block_rsv->full = 1; in btrfs_update_global_block_rsv()
407 block_rsv->full = 0; in btrfs_update_global_block_rsv()
409 if (block_rsv->size >= sinfo->total_bytes) in btrfs_update_global_block_rsv()
411 spin_unlock(&block_rsv->lock); in btrfs_update_global_block_rsv()
429 fs_info->extent_root->block_rsv = &fs_info->delayed_refs_rsv; in btrfs_init_global_block_rsv()
430 fs_info->csum_root->block_rsv = &fs_info->delayed_refs_rsv; in btrfs_init_global_block_rsv()
431 fs_info->dev_root->block_rsv = &fs_info->global_block_rsv; in btrfs_init_global_block_rsv()
432 fs_info->tree_root->block_rsv = &fs_info->global_block_rsv; in btrfs_init_global_block_rsv()
434 fs_info->quota_root->block_rsv = &fs_info->global_block_rsv; in btrfs_init_global_block_rsv()
435 fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv; in btrfs_init_global_block_rsv()
459 struct btrfs_block_rsv *block_rsv = NULL; in get_block_rsv() local
464 block_rsv = trans->block_rsv; in get_block_rsv()
466 if (!block_rsv) in get_block_rsv()
467 block_rsv = root->block_rsv; in get_block_rsv()
469 if (!block_rsv) in get_block_rsv()
470 block_rsv = &fs_info->empty_block_rsv; in get_block_rsv()
472 return block_rsv; in get_block_rsv()
480 struct btrfs_block_rsv *block_rsv; in btrfs_use_block_rsv() local
485 block_rsv = get_block_rsv(trans, root); in btrfs_use_block_rsv()
487 if (unlikely(block_rsv->size == 0)) in btrfs_use_block_rsv()
490 ret = btrfs_block_rsv_use_bytes(block_rsv, blocksize); in btrfs_use_block_rsv()
492 return block_rsv; in btrfs_use_block_rsv()
494 if (block_rsv->failfast) in btrfs_use_block_rsv()
497 if (block_rsv->type == BTRFS_BLOCK_RSV_GLOBAL && !global_updated) { in btrfs_use_block_rsv()
507 if (block_rsv->type != BTRFS_BLOCK_RSV_DELREFS && in btrfs_use_block_rsv()
515 block_rsv->type, ret); in btrfs_use_block_rsv()
518 ret = btrfs_reserve_metadata_bytes(root, block_rsv, blocksize, in btrfs_use_block_rsv()
521 return block_rsv; in btrfs_use_block_rsv()
527 if (block_rsv->type != BTRFS_BLOCK_RSV_GLOBAL && in btrfs_use_block_rsv()
528 block_rsv->space_info == global_rsv->space_info) { in btrfs_use_block_rsv()