Lines Matching refs:block_rsv

106 				    struct btrfs_block_rsv *block_rsv,  in block_rsv_release_bytes()  argument
110 struct btrfs_space_info *space_info = block_rsv->space_info; in block_rsv_release_bytes()
114 spin_lock(&block_rsv->lock); in block_rsv_release_bytes()
116 num_bytes = block_rsv->size; in block_rsv_release_bytes()
117 qgroup_to_release = block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
119 block_rsv->size -= num_bytes; in block_rsv_release_bytes()
120 if (block_rsv->reserved >= block_rsv->size) { in block_rsv_release_bytes()
121 num_bytes = block_rsv->reserved - block_rsv->size; in block_rsv_release_bytes()
122 block_rsv->reserved = block_rsv->size; in block_rsv_release_bytes()
123 block_rsv->full = true; in block_rsv_release_bytes()
127 if (block_rsv->qgroup_rsv_reserved >= block_rsv->qgroup_rsv_size) { in block_rsv_release_bytes()
128 qgroup_to_release = block_rsv->qgroup_rsv_reserved - in block_rsv_release_bytes()
129 block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
130 block_rsv->qgroup_rsv_reserved = block_rsv->qgroup_rsv_size; in block_rsv_release_bytes()
134 spin_unlock(&block_rsv->lock); in block_rsv_release_bytes()
195 struct btrfs_block_rsv *block_rsv; in btrfs_alloc_block_rsv() local
197 block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS); in btrfs_alloc_block_rsv()
198 if (!block_rsv) in btrfs_alloc_block_rsv()
201 btrfs_init_metadata_block_rsv(fs_info, block_rsv, type); in btrfs_alloc_block_rsv()
202 return block_rsv; in btrfs_alloc_block_rsv()
215 struct btrfs_block_rsv *block_rsv, u64 num_bytes, in btrfs_block_rsv_add() argument
223 ret = btrfs_reserve_metadata_bytes(fs_info, block_rsv, num_bytes, flush); in btrfs_block_rsv_add()
225 btrfs_block_rsv_add_bytes(block_rsv, num_bytes, true); in btrfs_block_rsv_add()
230 int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_percent) in btrfs_block_rsv_check() argument
235 if (!block_rsv) in btrfs_block_rsv_check()
238 spin_lock(&block_rsv->lock); in btrfs_block_rsv_check()
239 num_bytes = mult_perc(block_rsv->size, min_percent); in btrfs_block_rsv_check()
240 if (block_rsv->reserved >= num_bytes) in btrfs_block_rsv_check()
242 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_check()
248 struct btrfs_block_rsv *block_rsv, u64 min_reserved, in btrfs_block_rsv_refill() argument
254 if (!block_rsv) in btrfs_block_rsv_refill()
257 spin_lock(&block_rsv->lock); in btrfs_block_rsv_refill()
259 if (block_rsv->reserved >= num_bytes) in btrfs_block_rsv_refill()
262 num_bytes -= block_rsv->reserved; in btrfs_block_rsv_refill()
263 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_refill()
268 ret = btrfs_reserve_metadata_bytes(fs_info, block_rsv, num_bytes, flush); in btrfs_block_rsv_refill()
270 btrfs_block_rsv_add_bytes(block_rsv, num_bytes, false); in btrfs_block_rsv_refill()
278 struct btrfs_block_rsv *block_rsv, u64 num_bytes, in btrfs_block_rsv_release() argument
289 if (block_rsv == delayed_rsv) in btrfs_block_rsv_release()
291 else if (block_rsv != global_rsv && !btrfs_block_rsv_full(delayed_rsv)) in btrfs_block_rsv_release()
294 if (target && block_rsv->space_info != target->space_info) in btrfs_block_rsv_release()
297 return block_rsv_release_bytes(fs_info, block_rsv, target, num_bytes, in btrfs_block_rsv_release()
301 int btrfs_block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, u64 num_bytes) in btrfs_block_rsv_use_bytes() argument
305 spin_lock(&block_rsv->lock); in btrfs_block_rsv_use_bytes()
306 if (block_rsv->reserved >= num_bytes) { in btrfs_block_rsv_use_bytes()
307 block_rsv->reserved -= num_bytes; in btrfs_block_rsv_use_bytes()
308 if (block_rsv->reserved < block_rsv->size) in btrfs_block_rsv_use_bytes()
309 block_rsv->full = false; in btrfs_block_rsv_use_bytes()
312 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_use_bytes()
316 void btrfs_block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv, in btrfs_block_rsv_add_bytes() argument
319 spin_lock(&block_rsv->lock); in btrfs_block_rsv_add_bytes()
320 block_rsv->reserved += num_bytes; in btrfs_block_rsv_add_bytes()
322 block_rsv->size += num_bytes; in btrfs_block_rsv_add_bytes()
323 else if (block_rsv->reserved >= block_rsv->size) in btrfs_block_rsv_add_bytes()
324 block_rsv->full = true; in btrfs_block_rsv_add_bytes()
325 spin_unlock(&block_rsv->lock); in btrfs_block_rsv_add_bytes()
330 struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv; in btrfs_update_global_block_rsv() local
331 struct btrfs_space_info *sinfo = block_rsv->space_info; in btrfs_update_global_block_rsv()
371 spin_lock(&block_rsv->lock); in btrfs_update_global_block_rsv()
373 block_rsv->size = min_t(u64, num_bytes, SZ_512M); in btrfs_update_global_block_rsv()
375 if (block_rsv->reserved < block_rsv->size) { in btrfs_update_global_block_rsv()
376 num_bytes = block_rsv->size - block_rsv->reserved; in btrfs_update_global_block_rsv()
379 block_rsv->reserved = block_rsv->size; in btrfs_update_global_block_rsv()
380 } else if (block_rsv->reserved > block_rsv->size) { in btrfs_update_global_block_rsv()
381 num_bytes = block_rsv->reserved - block_rsv->size; in btrfs_update_global_block_rsv()
384 block_rsv->reserved = block_rsv->size; in btrfs_update_global_block_rsv()
388 block_rsv->full = (block_rsv->reserved == block_rsv->size); in btrfs_update_global_block_rsv()
390 if (block_rsv->size >= sinfo->total_bytes) in btrfs_update_global_block_rsv()
392 spin_unlock(&block_rsv->lock); in btrfs_update_global_block_rsv()
405 root->block_rsv = &fs_info->delayed_refs_rsv; in btrfs_init_root_block_rsv()
410 root->block_rsv = &fs_info->global_block_rsv; in btrfs_init_root_block_rsv()
413 root->block_rsv = &fs_info->chunk_block_rsv; in btrfs_init_root_block_rsv()
416 root->block_rsv = NULL; in btrfs_init_root_block_rsv()
457 struct btrfs_block_rsv *block_rsv = NULL; in get_block_rsv() local
463 block_rsv = trans->block_rsv; in get_block_rsv()
465 if (!block_rsv) in get_block_rsv()
466 block_rsv = root->block_rsv; in get_block_rsv()
468 if (!block_rsv) in get_block_rsv()
469 block_rsv = &fs_info->empty_block_rsv; in get_block_rsv()
471 return block_rsv; in get_block_rsv()
479 struct btrfs_block_rsv *block_rsv; in btrfs_use_block_rsv() local
484 block_rsv = get_block_rsv(trans, root); in btrfs_use_block_rsv()
486 if (unlikely(block_rsv->size == 0)) in btrfs_use_block_rsv()
489 ret = btrfs_block_rsv_use_bytes(block_rsv, blocksize); in btrfs_use_block_rsv()
491 return block_rsv; in btrfs_use_block_rsv()
493 if (block_rsv->failfast) in btrfs_use_block_rsv()
496 if (block_rsv->type == BTRFS_BLOCK_RSV_GLOBAL && !global_updated) { in btrfs_use_block_rsv()
506 if (block_rsv->type != BTRFS_BLOCK_RSV_DELREFS && in btrfs_use_block_rsv()
514 block_rsv->type, ret); in btrfs_use_block_rsv()
517 ret = btrfs_reserve_metadata_bytes(fs_info, block_rsv, blocksize, in btrfs_use_block_rsv()
520 return block_rsv; in btrfs_use_block_rsv()
526 if (block_rsv->type != BTRFS_BLOCK_RSV_GLOBAL && in btrfs_use_block_rsv()
527 block_rsv->space_info == global_rsv->space_info) { in btrfs_use_block_rsv()
539 ret = btrfs_reserve_metadata_bytes(fs_info, block_rsv, blocksize, in btrfs_use_block_rsv()
542 return block_rsv; in btrfs_use_block_rsv()