Skip to content

Commit 08f31ed

Browse files
yangdongshengkawasaki
authored andcommitted
dm-pcache: add cache core
Add cache.c and cache.h that introduce the top-level “struct pcache_cache”. This object glues together the backing block device, the persistent-memory cache device, segment array, RB-tree indexes, and the background workers for write-back and garbage collection. * Persistent metadata - pcache_cache_info tracks options such as cache mode, data-crc flag and GC threshold, written atomically with CRC+sequence. - key_tail and dirty_tail positions are double-buffered and recovered at mount time. * Segment management - kvcalloc()’d array of pcache_cache_segment objects, bitmap for fast allocation, refcounts and generation numbers so GC can invalidate old extents safely. - First segment hosts a pcache_cache_ctrl block shared by all threads. * Request path hooks - pcache_cache_handle_req() dispatches READ, WRITE and FLUSH bios to the engines added in earlier patches. - Per-CPU data_heads support lock-free allocation of space for new writes. * Background workers - Delayed work items for write-back (5 s) and GC (5 s). - clean_work removes stale keys after segments are reclaimed. * Lifecycle helpers - pcache_cache_start()/stop() bring the cache online, replay keys, start workers, and flush everything on shutdown. With this piece in place dm-pcache has a fully initialised cache object capable of serving I/O and maintaining its on-disk structures. Signed-off-by: Dongsheng Yang <[email protected]>
1 parent 5989d22 commit 08f31ed

2 files changed

Lines changed: 1048 additions & 0 deletions

File tree

0 commit comments

Comments
 (0)