fs/btrfs/block-rsv.c
Source file repositories/reference/linux-study-clean/fs/btrfs/block-rsv.c
File Facts
- System
- Linux kernel
- Corpus path
fs/btrfs/block-rsv.c- Extension
.c- Size
- 19323 bytes
- Lines
- 613
- Domain
- Core OS
- Bucket
- VFS And Filesystem Core
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
misc.hctree.hblock-rsv.hspace-info.htransaction.hblock-group.hfs.haccessors.h
Detected Declarations
function btrfs_reserve_metadata_bytesfunction btrfs_block_rsv_migratefunction btrfs_init_block_rsvfunction btrfs_init_metadata_block_rsvfunction btrfs_free_block_rsvfunction btrfs_block_rsv_addfunction btrfs_block_rsv_checkfunction btrfs_block_rsv_refillfunction btrfs_block_rsv_releasefunction btrfs_block_rsv_use_bytesfunction btrfs_block_rsv_add_bytesfunction btrfs_update_global_block_rsvfunction btrfs_init_root_block_rsvfunction btrfs_init_global_block_rsvfunction btrfs_release_global_block_rsvfunction btrfs_test_optfunction btrfs_check_trunc_cache_free_space
Annotated Snippet
if (dest) {
spin_lock(&dest->lock);
if (!dest->full) {
u64 bytes_to_add;
bytes_to_add = dest->size - dest->reserved;
bytes_to_add = min(num_bytes, bytes_to_add);
dest->reserved += bytes_to_add;
if (dest->reserved >= dest->size)
dest->full = true;
num_bytes -= bytes_to_add;
}
spin_unlock(&dest->lock);
}
if (num_bytes)
btrfs_space_info_free_bytes_may_use(space_info, num_bytes);
}
if (qgroup_to_release_ret)
*qgroup_to_release_ret = qgroup_to_release;
return ret;
}
int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src,
struct btrfs_block_rsv *dst, u64 num_bytes,
bool update_size)
{
int ret;
ret = btrfs_block_rsv_use_bytes(src, num_bytes);
if (ret)
return ret;
btrfs_block_rsv_add_bytes(dst, num_bytes, update_size);
return 0;
}
void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, enum btrfs_rsv_type type)
{
memset(rsv, 0, sizeof(*rsv));
spin_lock_init(&rsv->lock);
rsv->type = type;
}
void btrfs_init_metadata_block_rsv(struct btrfs_fs_info *fs_info,
struct btrfs_block_rsv *rsv,
enum btrfs_rsv_type type)
{
btrfs_init_block_rsv(rsv, type);
rsv->space_info = btrfs_find_space_info(fs_info,
BTRFS_BLOCK_GROUP_METADATA);
}
struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_fs_info *fs_info,
enum btrfs_rsv_type type)
{
struct btrfs_block_rsv *block_rsv;
block_rsv = kmalloc_obj(*block_rsv, GFP_NOFS);
if (!block_rsv)
return NULL;
btrfs_init_metadata_block_rsv(fs_info, block_rsv, type);
return block_rsv;
}
void btrfs_free_block_rsv(struct btrfs_fs_info *fs_info,
struct btrfs_block_rsv *rsv)
{
if (!rsv)
return;
btrfs_block_rsv_release(fs_info, rsv, (u64)-1, NULL);
kfree(rsv);
}
int btrfs_block_rsv_add(struct btrfs_fs_info *fs_info,
struct btrfs_block_rsv *block_rsv, u64 num_bytes,
enum btrfs_reserve_flush_enum flush)
{
int ret;
if (num_bytes == 0)
return 0;
ret = btrfs_reserve_metadata_bytes(block_rsv->space_info, num_bytes, flush);
if (!ret)
btrfs_block_rsv_add_bytes(block_rsv, num_bytes, true);
return ret;
}
Annotation
- Immediate include surface: `misc.h`, `ctree.h`, `block-rsv.h`, `space-info.h`, `transaction.h`, `block-group.h`, `fs.h`, `accessors.h`.
- Detected declarations: `function btrfs_reserve_metadata_bytes`, `function btrfs_block_rsv_migrate`, `function btrfs_init_block_rsv`, `function btrfs_init_metadata_block_rsv`, `function btrfs_free_block_rsv`, `function btrfs_block_rsv_add`, `function btrfs_block_rsv_check`, `function btrfs_block_rsv_refill`, `function btrfs_block_rsv_release`, `function btrfs_block_rsv_use_bytes`.
- Atlas domain: Core OS / VFS And Filesystem Core.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.