include/linux/fscache.h
Source file repositories/reference/linux-study-clean/include/linux/fscache.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/fscache.h- Extension
.h- Size
- 24549 bytes
- Lines
- 654
- Domain
- Core OS
- Bucket
- Core Kernel Interface
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/fs.hlinux/netfs.hlinux/writeback.h
Detected Declarations
struct fscache_cookiestruct fscache_volumestruct fscache_cookieenum fscache_want_stateenum fscache_cookie_statefunction fscache_relinquish_volumefunction fscache_use_cookiefunction fscache_unuse_cookiefunction fscache_relinquish_cookiefunction fscache_update_auxfunction __fscache_update_cookiefunction fscache_update_cookiefunction fscache_resize_cookiefunction fscache_invalidatefunction fscache_begin_read_operationfunction fscache_end_operationfunction fscache_begin_operationfunction fscache_begin_write_operationfunction fscache_begin_operationfunction fscache_clear_page_bitsfunction fscache_write_to_cachefunction fscache_note_page_release
Annotated Snippet
struct fscache_volume {
refcount_t ref;
atomic_t n_cookies; /* Number of data cookies in volume */
atomic_t n_accesses; /* Number of cache accesses in progress */
unsigned int debug_id;
unsigned int key_hash; /* Hash of key string */
u8 *key; /* Volume ID, eg. "afs@example.com@1234" */
struct list_head proc_link; /* Link in /proc/fs/fscache/volumes */
struct hlist_bl_node hash_link; /* Link in hash table */
struct work_struct work;
struct fscache_cache *cache; /* The cache in which this resides */
void *cache_priv; /* Cache private data */
spinlock_t lock;
unsigned long flags;
#define FSCACHE_VOLUME_RELINQUISHED 0 /* Volume is being cleaned up */
#define FSCACHE_VOLUME_INVALIDATE 1 /* Volume was invalidated */
#define FSCACHE_VOLUME_COLLIDED_WITH 2 /* Volume was collided with */
#define FSCACHE_VOLUME_ACQUIRE_PENDING 3 /* Volume is waiting to complete acquisition */
#define FSCACHE_VOLUME_CREATING 4 /* Volume is being created on disk */
u8 coherency_len; /* Length of the coherency data */
u8 coherency[]; /* Coherency data */
};
/*
* Data file representation cookie.
* - a file will only appear in one cache
* - a request to cache a file may or may not be honoured, subject to
* constraints such as disk space
* - indices are created on disk just-in-time
*/
struct fscache_cookie {
refcount_t ref;
atomic_t n_active; /* number of active users of cookie */
atomic_t n_accesses; /* Number of cache accesses in progress */
unsigned int debug_id;
unsigned int inval_counter; /* Number of invalidations made */
spinlock_t lock;
struct fscache_volume *volume; /* Parent volume of this file. */
void *cache_priv; /* Cache-side representation */
struct hlist_bl_node hash_link; /* Link in hash table */
struct list_head proc_link; /* Link in proc list */
struct list_head commit_link; /* Link in commit queue */
struct work_struct work; /* Commit/relinq/withdraw work */
loff_t object_size; /* Size of the netfs object */
unsigned long unused_at; /* Time at which unused (jiffies) */
unsigned long flags;
#define FSCACHE_COOKIE_RELINQUISHED 0 /* T if cookie has been relinquished */
#define FSCACHE_COOKIE_RETIRED 1 /* T if this cookie has retired on relinq */
#define FSCACHE_COOKIE_IS_CACHING 2 /* T if this cookie is cached */
#define FSCACHE_COOKIE_NO_DATA_TO_READ 3 /* T if this cookie has nothing to read */
#define FSCACHE_COOKIE_NEEDS_UPDATE 4 /* T if attrs have been updated */
#define FSCACHE_COOKIE_HAS_BEEN_CACHED 5 /* T if cookie needs withdraw-on-relinq */
#define FSCACHE_COOKIE_DISABLED 6 /* T if cookie has been disabled */
#define FSCACHE_COOKIE_LOCAL_WRITE 7 /* T if cookie has been modified locally */
#define FSCACHE_COOKIE_NO_ACCESS_WAKE 8 /* T if no wake when n_accesses goes 0 */
#define FSCACHE_COOKIE_DO_RELINQUISH 9 /* T if this cookie needs relinquishment */
#define FSCACHE_COOKIE_DO_WITHDRAW 10 /* T if this cookie needs withdrawing */
#define FSCACHE_COOKIE_DO_LRU_DISCARD 11 /* T if this cookie needs LRU discard */
#define FSCACHE_COOKIE_DO_PREP_TO_WRITE 12 /* T if cookie needs write preparation */
#define FSCACHE_COOKIE_HAVE_DATA 13 /* T if this cookie has data stored */
#define FSCACHE_COOKIE_IS_HASHED 14 /* T if this cookie is hashed */
#define FSCACHE_COOKIE_DO_INVALIDATE 15 /* T if cookie needs invalidation */
enum fscache_cookie_state state;
u8 advice; /* FSCACHE_ADV_* */
u8 key_len; /* Length of index key */
u8 aux_len; /* Length of auxiliary data */
u32 key_hash; /* Hash of volume, key, len */
union {
void *key; /* Index key */
u8 inline_key[16]; /* - If the key is short enough */
};
union {
void *aux; /* Auxiliary data */
u8 inline_aux[8]; /* - If the aux data is short enough */
};
};
/*
* slow-path functions for when there is actually caching available, and the
* netfs does actually have a valid token
* - these are not to be called directly
* - these are undefined symbols when FS-Cache is not configured and the
* optimiser takes care of not using them
*/
extern struct fscache_volume *__fscache_acquire_volume(const char *, const char *,
const void *, size_t);
extern void __fscache_relinquish_volume(struct fscache_volume *, const void *, bool);
extern struct fscache_cookie *__fscache_acquire_cookie(
Annotation
- Immediate include surface: `linux/fs.h`, `linux/netfs.h`, `linux/writeback.h`.
- Detected declarations: `struct fscache_cookie`, `struct fscache_volume`, `struct fscache_cookie`, `enum fscache_want_state`, `enum fscache_cookie_state`, `function fscache_relinquish_volume`, `function fscache_use_cookie`, `function fscache_unuse_cookie`, `function fscache_relinquish_cookie`, `function fscache_update_aux`.
- Atlas domain: Core OS / Core Kernel Interface.
- 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.