Lines Matching refs:block_rsv

16  *   Think of block_rsv's as buckets for logically grouped metadata
17 * reservations. Each block_rsv has a ->size and a ->reserved. ->size is
39 * to determine the appropriate block_rsv to use, and then verify that
106 struct btrfs_block_rsv *block_rsv,
110 struct btrfs_space_info *space_info = block_rsv->space_info;
114 spin_lock(&block_rsv->lock);
116 num_bytes = block_rsv->size;
117 qgroup_to_release = block_rsv->qgroup_rsv_size;
119 block_rsv->size -= num_bytes;
120 if (block_rsv->reserved >= block_rsv->size) {
121 num_bytes = block_rsv->reserved - block_rsv->size;
122 block_rsv->reserved = block_rsv->size;
123 block_rsv->full = true;
128 block_rsv->qgroup_rsv_reserved >= block_rsv->qgroup_rsv_size) {
129 qgroup_to_release = block_rsv->qgroup_rsv_reserved -
130 block_rsv->qgroup_rsv_size;
131 block_rsv->qgroup_rsv_reserved = block_rsv->qgroup_rsv_size;
135 spin_unlock(&block_rsv->lock);
196 struct btrfs_block_rsv *block_rsv;
198 block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS);
199 if (!block_rsv)
202 btrfs_init_metadata_block_rsv(fs_info, block_rsv, type);
203 return block_rsv;
216 struct btrfs_block_rsv *block_rsv, u64 num_bytes,
224 ret = btrfs_reserve_metadata_bytes(fs_info, block_rsv, num_bytes, flush);
226 btrfs_block_rsv_add_bytes(block_rsv, num_bytes, true);
231 int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_percent)
236 spin_lock(&block_rsv->lock);
237 num_bytes = mult_perc(block_rsv->size, min_percent);
238 if (block_rsv->reserved >= num_bytes)
240 spin_unlock(&block_rsv->lock);
246 struct btrfs_block_rsv *block_rsv, u64 num_bytes,
251 if (!block_rsv)
254 spin_lock(&block_rsv->lock);
255 if (block_rsv->reserved >= num_bytes)
258 num_bytes -= block_rsv->reserved;
259 spin_unlock(&block_rsv->lock);
264 ret = btrfs_reserve_metadata_bytes(fs_info, block_rsv, num_bytes, flush);
266 btrfs_block_rsv_add_bytes(block_rsv, num_bytes, false);
274 struct btrfs_block_rsv *block_rsv, u64 num_bytes,
285 if (block_rsv == delayed_rsv)
287 else if (block_rsv != global_rsv && !btrfs_block_rsv_full(delayed_rsv))
290 if (target && block_rsv->space_info != target->space_info)
293 return block_rsv_release_bytes(fs_info, block_rsv, target, num_bytes,
297 int btrfs_block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, u64 num_bytes)
301 spin_lock(&block_rsv->lock);
302 if (block_rsv->reserved >= num_bytes) {
303 block_rsv->reserved -= num_bytes;
304 if (block_rsv->reserved < block_rsv->size)
305 block_rsv->full = false;
308 spin_unlock(&block_rsv->lock);
312 void btrfs_block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv,
315 spin_lock(&block_rsv->lock);
316 block_rsv->reserved += num_bytes;
318 block_rsv->size += num_bytes;
319 else if (block_rsv->reserved >= block_rsv->size)
320 block_rsv->full = true;
321 spin_unlock(&block_rsv->lock);
326 struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv;
327 struct btrfs_space_info *sinfo = block_rsv->space_info;
374 spin_lock(&block_rsv->lock);
376 block_rsv->size = min_t(u64, num_bytes, SZ_512M);
378 if (block_rsv->reserved < block_rsv->size) {
379 num_bytes = block_rsv->size - block_rsv->reserved;
382 block_rsv->reserved = block_rsv->size;
383 } else if (block_rsv->reserved > block_rsv->size) {
384 num_bytes = block_rsv->reserved - block_rsv->size;
387 block_rsv->reserved = block_rsv->size;
391 block_rsv->full = (block_rsv->reserved == block_rsv->size);
393 if (block_rsv->size >= sinfo->total_bytes)
395 spin_unlock(&block_rsv->lock);
408 root->block_rsv = &fs_info->delayed_refs_rsv;
413 root->block_rsv = &fs_info->global_block_rsv;
416 root->block_rsv = &fs_info->chunk_block_rsv;
419 root->block_rsv = NULL;
460 struct btrfs_block_rsv *block_rsv = NULL;
466 block_rsv = trans->block_rsv;
468 if (!block_rsv)
469 block_rsv = root->block_rsv;
471 if (!block_rsv)
472 block_rsv = &fs_info->empty_block_rsv;
474 return block_rsv;
482 struct btrfs_block_rsv *block_rsv;
487 block_rsv = get_block_rsv(trans, root);
489 if (unlikely(btrfs_block_rsv_size(block_rsv) == 0))
492 ret = btrfs_block_rsv_use_bytes(block_rsv, blocksize);
494 return block_rsv;
496 if (block_rsv->failfast)
499 if (block_rsv->type == BTRFS_BLOCK_RSV_GLOBAL && !global_updated) {
509 if (block_rsv->type != BTRFS_BLOCK_RSV_DELREFS &&
517 block_rsv->type, ret);
520 ret = btrfs_reserve_metadata_bytes(fs_info, block_rsv, blocksize,
523 return block_rsv;
529 if (block_rsv->type != BTRFS_BLOCK_RSV_GLOBAL &&
530 block_rsv->space_info == global_rsv->space_info) {
542 ret = btrfs_reserve_metadata_bytes(fs_info, block_rsv, blocksize,
545 return block_rsv;