1/* 2 File: linux/mbcache.h 3 4 (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org> 5*/ 6struct mb_cache_entry { 7 struct list_head e_lru_list; 8 struct mb_cache *e_cache; 9 unsigned short e_used; 10 unsigned short e_queued; 11 atomic_t e_refcnt; 12 struct block_device *e_bdev; 13 sector_t e_block; 14 struct hlist_bl_node e_block_list; 15 struct { 16 struct hlist_bl_node o_list; 17 unsigned int o_key; 18 } e_index; 19 struct hlist_bl_head *e_block_hash_p; 20 struct hlist_bl_head *e_index_hash_p; 21}; 22 23struct mb_cache { 24 struct list_head c_cache_list; 25 const char *c_name; 26 atomic_t c_entry_count; 27 int c_max_entries; 28 int c_bucket_bits; 29 struct kmem_cache *c_entry_cache; 30 struct hlist_bl_head *c_block_hash; 31 struct hlist_bl_head *c_index_hash; 32}; 33 34/* Functions on caches */ 35 36struct mb_cache *mb_cache_create(const char *, int); 37void mb_cache_shrink(struct block_device *); 38void mb_cache_destroy(struct mb_cache *); 39 40/* Functions on cache entries */ 41 42struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *, gfp_t); 43int mb_cache_entry_insert(struct mb_cache_entry *, struct block_device *, 44 sector_t, unsigned int); 45void mb_cache_entry_release(struct mb_cache_entry *); 46void mb_cache_entry_free(struct mb_cache_entry *); 47struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *, 48 struct block_device *, 49 sector_t); 50struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache, 51 struct block_device *, 52 unsigned int); 53struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache_entry *, 54 struct block_device *, 55 unsigned int); 56