diff options
Diffstat (limited to 'fs/xfs/xfs_mru_cache.h')
-rw-r--r-- | fs/xfs/xfs_mru_cache.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/fs/xfs/xfs_mru_cache.h b/fs/xfs/xfs_mru_cache.h new file mode 100644 index 000000000000..624fd10ee8e5 --- /dev/null +++ b/fs/xfs/xfs_mru_cache.h | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2006-2007 Silicon Graphics, Inc. | ||
3 | * All Rights Reserved. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU General Public License as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it would be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write the Free Software Foundation, | ||
16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
17 | */ | ||
18 | #ifndef __XFS_MRU_CACHE_H__ | ||
19 | #define __XFS_MRU_CACHE_H__ | ||
20 | |||
21 | |||
22 | /* Function pointer type for callback to free a client's data pointer. */ | ||
23 | typedef void (*xfs_mru_cache_free_func_t)(unsigned long, void*); | ||
24 | |||
25 | typedef struct xfs_mru_cache | ||
26 | { | ||
27 | struct radix_tree_root store; /* Core storage data structure. */ | ||
28 | struct list_head *lists; /* Array of lists, one per grp. */ | ||
29 | struct list_head reap_list; /* Elements overdue for reaping. */ | ||
30 | spinlock_t lock; /* Lock to protect this struct. */ | ||
31 | unsigned int grp_count; /* Number of discrete groups. */ | ||
32 | unsigned int grp_time; /* Time period spanned by grps. */ | ||
33 | unsigned int lru_grp; /* Group containing time zero. */ | ||
34 | unsigned long time_zero; /* Time first element was added. */ | ||
35 | unsigned long next_reap; /* Time that the reaper should | ||
36 | next do something. */ | ||
37 | unsigned int reap_all; /* if set, reap all lists */ | ||
38 | xfs_mru_cache_free_func_t free_func; /* Function pointer for freeing. */ | ||
39 | struct delayed_work work; /* Workqueue data for reaping. */ | ||
40 | } xfs_mru_cache_t; | ||
41 | |||
42 | int xfs_mru_cache_init(void); | ||
43 | void xfs_mru_cache_uninit(void); | ||
44 | int xfs_mru_cache_create(struct xfs_mru_cache **mrup, unsigned int lifetime_ms, | ||
45 | unsigned int grp_count, | ||
46 | xfs_mru_cache_free_func_t free_func); | ||
47 | void xfs_mru_cache_flush(xfs_mru_cache_t *mru, int restart); | ||
48 | void xfs_mru_cache_destroy(struct xfs_mru_cache *mru); | ||
49 | int xfs_mru_cache_insert(struct xfs_mru_cache *mru, unsigned long key, | ||
50 | void *value); | ||
51 | void * xfs_mru_cache_remove(struct xfs_mru_cache *mru, unsigned long key); | ||
52 | void xfs_mru_cache_delete(struct xfs_mru_cache *mru, unsigned long key); | ||
53 | void *xfs_mru_cache_lookup(struct xfs_mru_cache *mru, unsigned long key); | ||
54 | void *xfs_mru_cache_peek(struct xfs_mru_cache *mru, unsigned long key); | ||
55 | void xfs_mru_cache_done(struct xfs_mru_cache *mru); | ||
56 | |||
57 | #endif /* __XFS_MRU_CACHE_H__ */ | ||