fs/btrfs/lru_cache.h
Source file repositories/reference/linux-study-clean/fs/btrfs/lru_cache.h
File Facts
- System
- Linux kernel
- Corpus path
fs/btrfs/lru_cache.h- Extension
.h- Size
- 2587 bytes
- Lines
- 72
- 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.
- 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
linux/types.hlinux/maple_tree.hlinux/list.h
Detected Declarations
struct btrfs_lru_cache_entrystruct btrfs_lru_cache
Annotated Snippet
struct btrfs_lru_cache_entry {
struct list_head lru_list;
u64 key;
/*
* Optional generation associated to a key. Use 0 if not needed/used.
* Entries with the same key and different generations are stored in a
* linked list, so use this only for cases where there's a small number
* of different generations.
*/
u64 gen;
/*
* The maple tree uses unsigned long type for the keys, which is 32 bits
* on 32 bits systems, and 64 bits on 64 bits systems. So if we want to
* use something like inode numbers as keys, which are always a u64, we
* have to deal with this in a special way - we store the key in the
* entry itself, as a u64, and the values inserted into the maple tree
* are linked lists of entries - so in case we are on a 64 bits system,
* that list always has a single entry, while on 32 bits systems it
* may have more than one, with each entry having the same value for
* their lower 32 bits of the u64 key.
*/
struct list_head list;
};
struct btrfs_lru_cache {
struct list_head lru_list;
struct maple_tree entries;
/* Number of entries stored in the cache. */
unsigned int size;
/* Maximum number of entries the cache can have. */
unsigned int max_size;
};
#define btrfs_lru_cache_for_each_entry_safe(cache, entry, tmp) \
list_for_each_entry_safe_reverse((entry), (tmp), &(cache)->lru_list, lru_list)
static inline struct btrfs_lru_cache_entry *btrfs_lru_cache_lru_entry(
struct btrfs_lru_cache *cache)
{
return list_first_entry_or_null(&cache->lru_list,
struct btrfs_lru_cache_entry, lru_list);
}
void btrfs_lru_cache_init(struct btrfs_lru_cache *cache, unsigned int max_size);
struct btrfs_lru_cache_entry *btrfs_lru_cache_lookup(struct btrfs_lru_cache *cache,
u64 key, u64 gen);
int btrfs_lru_cache_store(struct btrfs_lru_cache *cache,
struct btrfs_lru_cache_entry *new_entry,
gfp_t gfp);
void btrfs_lru_cache_remove(struct btrfs_lru_cache *cache,
struct btrfs_lru_cache_entry *entry);
void btrfs_lru_cache_clear(struct btrfs_lru_cache *cache);
#endif
Annotation
- Immediate include surface: `linux/types.h`, `linux/maple_tree.h`, `linux/list.h`.
- Detected declarations: `struct btrfs_lru_cache_entry`, `struct btrfs_lru_cache`.
- Atlas domain: Core OS / VFS And Filesystem Core.
- Implementation status: source implementation candidate.
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.