1 /* 2 File: linux/mbcache.h 3 4 (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org> 5 */ 6 7 /* Hardwire the number of additional indexes */ 8 #define MB_CACHE_INDEXES_COUNT 1 9 10 struct mb_cache_entry { 11 struct list_head e_lru_list; 12 struct mb_cache *e_cache; 13 unsigned short e_used; 14 unsigned short e_queued; 15 struct block_device *e_bdev; 16 sector_t e_block; 17 struct list_head e_block_list; 18 struct { 19 struct list_head o_list; 20 unsigned int o_key; 21 } e_indexes[0]; 22 }; 23 24 struct mb_cache_op { 25 int (*free)(struct mb_cache_entry *, gfp_t); 26 }; 27 28 /* Functions on caches */ 29 30 struct mb_cache * mb_cache_create(const char *, struct mb_cache_op *, size_t, 31 int, int); 32 void mb_cache_shrink(struct block_device *); 33 void mb_cache_destroy(struct mb_cache *); 34 35 /* Functions on cache entries */ 36 37 struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *, gfp_t); 38 int mb_cache_entry_insert(struct mb_cache_entry *, struct block_device *, 39 sector_t, unsigned int[]); 40 void mb_cache_entry_release(struct mb_cache_entry *); 41 void mb_cache_entry_free(struct mb_cache_entry *); 42 struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *, 43 struct block_device *, 44 sector_t); 45 #if !defined(MB_CACHE_INDEXES_COUNT) || (MB_CACHE_INDEXES_COUNT > 0) 46 struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache, int, 47 struct block_device *, 48 unsigned int); 49 struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache_entry *, int, 50 struct block_device *, 51 unsigned int); 52 #endif 53