]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - include/linux/mbcache.h
Merge remote-tracking branch 'file-locks/linux-next'
[karo-tx-linux.git] / include / linux / mbcache.h
1 /*
2   File: linux/mbcache.h
3
4   (C) 2001 by Andreas Gruenbacher, <a.gruenbacher@computer.org>
5 */
6 struct 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
23 struct 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
36 struct mb_cache *mb_cache_create(const char *, int);
37 void mb_cache_shrink(struct block_device *);
38 void mb_cache_destroy(struct mb_cache *);
39
40 /* Functions on cache entries */
41
42 struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *, gfp_t);
43 int mb_cache_entry_insert(struct mb_cache_entry *, struct block_device *,
44                           sector_t, unsigned int);
45 void mb_cache_entry_release(struct mb_cache_entry *);
46 void mb_cache_entry_free(struct mb_cache_entry *);
47 struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *,
48                                           struct block_device *,
49                                           sector_t);
50 struct mb_cache_entry *mb_cache_entry_find_first(struct mb_cache *cache,
51                                                  struct block_device *, 
52                                                  unsigned int);
53 struct mb_cache_entry *mb_cache_entry_find_next(struct mb_cache_entry *,
54                                                 struct block_device *, 
55                                                 unsigned int);