Lines Matching refs:block_rsv
13 * Think of block_rsv's as buckets for logically grouped metadata
14 * reservations. Each block_rsv has a ->size and a ->reserved. ->size is
36 * to determine the appropriate block_rsv to use, and then verify that
103 struct btrfs_block_rsv *block_rsv,
107 struct btrfs_space_info *space_info = block_rsv->space_info;
111 spin_lock(&block_rsv->lock);
113 num_bytes = block_rsv->size;
114 qgroup_to_release = block_rsv->qgroup_rsv_size;
116 block_rsv->size -= num_bytes;
117 if (block_rsv->reserved >= block_rsv->size) {
118 num_bytes = block_rsv->reserved - block_rsv->size;
119 block_rsv->reserved = block_rsv->size;
120 block_rsv->full = 1;
125 block_rsv->qgroup_rsv_reserved >= block_rsv->qgroup_rsv_size) {
126 qgroup_to_release = block_rsv->qgroup_rsv_reserved -
127 block_rsv->qgroup_rsv_size;
128 block_rsv->qgroup_rsv_reserved = block_rsv->qgroup_rsv_size;
132 spin_unlock(&block_rsv->lock);
193 struct btrfs_block_rsv *block_rsv;
195 block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS);
196 if (!block_rsv)
199 btrfs_init_metadata_block_rsv(fs_info, block_rsv, type);
200 return block_rsv;
213 struct btrfs_block_rsv *block_rsv, u64 num_bytes,
221 ret = btrfs_reserve_metadata_bytes(root, block_rsv, num_bytes, flush);
223 btrfs_block_rsv_add_bytes(block_rsv, num_bytes, true);
228 int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_factor)
233 if (!block_rsv)
236 spin_lock(&block_rsv->lock);
237 num_bytes = div_factor(block_rsv->size, min_factor);
238 if (block_rsv->reserved >= num_bytes)
240 spin_unlock(&block_rsv->lock);
246 struct btrfs_block_rsv *block_rsv, u64 min_reserved,
252 if (!block_rsv)
255 spin_lock(&block_rsv->lock);
257 if (block_rsv->reserved >= num_bytes)
260 num_bytes -= block_rsv->reserved;
261 spin_unlock(&block_rsv->lock);
266 ret = btrfs_reserve_metadata_bytes(root, block_rsv, num_bytes, flush);
268 btrfs_block_rsv_add_bytes(block_rsv, num_bytes, false);
276 struct btrfs_block_rsv *block_rsv, u64 num_bytes,
287 if (block_rsv == delayed_rsv)
289 else if (block_rsv != global_rsv && !delayed_rsv->full)
292 if (target && block_rsv->space_info != target->space_info)
295 return block_rsv_release_bytes(fs_info, block_rsv, target, num_bytes,
299 int btrfs_block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, u64 num_bytes)
303 spin_lock(&block_rsv->lock);
304 if (block_rsv->reserved >= num_bytes) {
305 block_rsv->reserved -= num_bytes;
306 if (block_rsv->reserved < block_rsv->size)
307 block_rsv->full = 0;
310 spin_unlock(&block_rsv->lock);
314 void btrfs_block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv,
317 spin_lock(&block_rsv->lock);
318 block_rsv->reserved += num_bytes;
320 block_rsv->size += num_bytes;
321 else if (block_rsv->reserved >= block_rsv->size)
322 block_rsv->full = 1;
323 spin_unlock(&block_rsv->lock);
353 struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv;
354 struct btrfs_space_info *sinfo = block_rsv->space_info;
388 spin_lock(&block_rsv->lock);
390 block_rsv->size = min_t(u64, num_bytes, SZ_512M);
392 if (block_rsv->reserved < block_rsv->size) {
393 num_bytes = block_rsv->size - block_rsv->reserved;
396 block_rsv->reserved = block_rsv->size;
397 } else if (block_rsv->reserved > block_rsv->size) {
398 num_bytes = block_rsv->reserved - block_rsv->size;
401 block_rsv->reserved = block_rsv->size;
405 if (block_rsv->reserved == block_rsv->size)
406 block_rsv->full = 1;
408 block_rsv->full = 0;
410 if (block_rsv->size >= sinfo->total_bytes)
412 spin_unlock(&block_rsv->lock);
430 fs_info->extent_root->block_rsv = &fs_info->delayed_refs_rsv;
431 fs_info->csum_root->block_rsv = &fs_info->delayed_refs_rsv;
432 fs_info->dev_root->block_rsv = &fs_info->global_block_rsv;
433 fs_info->tree_root->block_rsv = &fs_info->global_block_rsv;
435 fs_info->quota_root->block_rsv = &fs_info->global_block_rsv;
436 fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv;
460 struct btrfs_block_rsv *block_rsv = NULL;
465 block_rsv = trans->block_rsv;
467 if (!block_rsv)
468 block_rsv = root->block_rsv;
470 if (!block_rsv)
471 block_rsv = &fs_info->empty_block_rsv;
473 return block_rsv;
481 struct btrfs_block_rsv *block_rsv;
486 block_rsv = get_block_rsv(trans, root);
488 if (unlikely(block_rsv->size == 0))
491 ret = btrfs_block_rsv_use_bytes(block_rsv, blocksize);
493 return block_rsv;
495 if (block_rsv->failfast)
498 if (block_rsv->type == BTRFS_BLOCK_RSV_GLOBAL && !global_updated) {
508 if (block_rsv->type != BTRFS_BLOCK_RSV_DELREFS &&
516 block_rsv->type, ret);
519 ret = btrfs_reserve_metadata_bytes(root, block_rsv, blocksize,
522 return block_rsv;
528 if (block_rsv->type != BTRFS_BLOCK_RSV_GLOBAL &&
529 block_rsv->space_info == global_rsv->space_info) {