drivers/md/dm-pcache/cache.h

Source file repositories/reference/linux-study-clean/drivers/md/dm-pcache/cache.h

File Facts

System
Linux kernel
Corpus path
drivers/md/dm-pcache/cache.h
Extension
.h
Size
18966 bytes
Lines
636
Domain
Driver Families
Bucket
drivers/md
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct pcache_cache_pos_onmedia {
	struct pcache_meta_header header;
	__u32 cache_seg_id;
	__u32 seg_off;
};

/* Offset and size definitions for cache segment control */
#define PCACHE_CACHE_SEG_CTRL_OFF     (PCACHE_SEG_INFO_SIZE * PCACHE_META_INDEX_MAX)
#define PCACHE_CACHE_SEG_CTRL_SIZE    (4 * PCACHE_KB)

struct pcache_cache_seg_gen {
	struct pcache_meta_header header;
	__u64 gen;
};

/* Control structure for cache segments */
struct pcache_cache_seg_ctrl {
	struct pcache_cache_seg_gen gen[PCACHE_META_INDEX_MAX];
	__u64	res[64];
};

#define PCACHE_CACHE_FLAGS_DATA_CRC			BIT(0)
#define PCACHE_CACHE_FLAGS_INIT_DONE			BIT(1)

#define PCACHE_CACHE_FLAGS_CACHE_MODE_MASK		GENMASK(5, 2)
#define PCACHE_CACHE_MODE_WRITEBACK			0
#define PCACHE_CACHE_MODE_WRITETHROUGH			1
#define PCACHE_CACHE_MODE_WRITEAROUND			2
#define PCACHE_CACHE_MODE_WRITEONLY			3

#define PCACHE_CACHE_FLAGS_GC_PERCENT_MASK		GENMASK(12, 6)

struct pcache_cache_info {
	struct pcache_meta_header header;
	__u32 seg_id;
	__u32 n_segs;
	__u32 flags;
	__u32 reserved;
};

struct pcache_cache_pos {
	struct pcache_cache_segment *cache_seg;
	u32 seg_off;
};

struct pcache_cache_segment {
	struct pcache_cache	*cache;
	u32			cache_seg_id;   /* Index in cache->segments */
	struct pcache_segment	segment;
	atomic_t		refs;

	struct pcache_segment_info cache_seg_info;
	struct mutex		info_lock;
	u32			info_index;

	spinlock_t		gen_lock;
	u64			gen;
	u64			gen_seq;
	u32			gen_index;

	struct pcache_cache_seg_ctrl *cache_seg_ctrl;
};

/* rbtree for cache entries */
struct pcache_cache_subtree {
	struct rb_root root;
	spinlock_t tree_lock;
};

struct pcache_cache_tree {
	struct pcache_cache		*cache;
	u32				n_subtrees;
	mempool_t			key_pool;
	struct pcache_cache_subtree	*subtrees;
};

extern struct kmem_cache *key_cache;

struct pcache_cache_key {
	struct pcache_cache_tree	*cache_tree;
	struct pcache_cache_subtree	*cache_subtree;
	struct kref			ref;
	struct rb_node			rb_node;
	struct list_head		list_node;
	u64				off;
	u32				len;
	u32				flags;
	struct pcache_cache_pos		cache_pos;
	u64				seg_gen;
};

Annotation

Implementation Notes