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