diff options
Diffstat (limited to 'include/linux/mbcache2.h')
-rw-r--r-- | include/linux/mbcache2.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/include/linux/mbcache2.h b/include/linux/mbcache2.h new file mode 100644 index 000000000000..b6f160ff2533 --- /dev/null +++ b/include/linux/mbcache2.h | |||
@@ -0,0 +1,50 @@ | |||
1 | #ifndef _LINUX_MB2CACHE_H | ||
2 | #define _LINUX_MB2CACHE_H | ||
3 | |||
4 | #include <linux/hash.h> | ||
5 | #include <linux/list_bl.h> | ||
6 | #include <linux/list.h> | ||
7 | #include <linux/atomic.h> | ||
8 | #include <linux/fs.h> | ||
9 | |||
10 | struct mb2_cache; | ||
11 | |||
12 | struct mb2_cache_entry { | ||
13 | /* LRU list - protected by cache->c_lru_list_lock */ | ||
14 | struct list_head e_lru_list; | ||
15 | /* Hash table list - protected by bitlock in e_hash_list_head */ | ||
16 | struct hlist_bl_node e_hash_list; | ||
17 | atomic_t e_refcnt; | ||
18 | /* Key in hash - stable during lifetime of the entry */ | ||
19 | u32 e_key; | ||
20 | /* Block number of hashed block - stable during lifetime of the entry */ | ||
21 | sector_t e_block; | ||
22 | /* Head of hash list (for list bit lock) - stable */ | ||
23 | struct hlist_bl_head *e_hash_list_head; | ||
24 | }; | ||
25 | |||
26 | struct mb2_cache *mb2_cache_create(int bucket_bits); | ||
27 | void mb2_cache_destroy(struct mb2_cache *cache); | ||
28 | |||
29 | int mb2_cache_entry_create(struct mb2_cache *cache, gfp_t mask, u32 key, | ||
30 | sector_t block); | ||
31 | void __mb2_cache_entry_free(struct mb2_cache_entry *entry); | ||
32 | static inline int mb2_cache_entry_put(struct mb2_cache *cache, | ||
33 | struct mb2_cache_entry *entry) | ||
34 | { | ||
35 | if (!atomic_dec_and_test(&entry->e_refcnt)) | ||
36 | return 0; | ||
37 | __mb2_cache_entry_free(entry); | ||
38 | return 1; | ||
39 | } | ||
40 | |||
41 | void mb2_cache_entry_delete_block(struct mb2_cache *cache, u32 key, | ||
42 | sector_t block); | ||
43 | struct mb2_cache_entry *mb2_cache_entry_find_first(struct mb2_cache *cache, | ||
44 | u32 key); | ||
45 | struct mb2_cache_entry *mb2_cache_entry_find_next(struct mb2_cache *cache, | ||
46 | struct mb2_cache_entry *entry); | ||
47 | void mb2_cache_entry_touch(struct mb2_cache *cache, | ||
48 | struct mb2_cache_entry *entry); | ||
49 | |||
50 | #endif /* _LINUX_MB2CACHE_H */ | ||