diff options
author | Joern Engel <joern@logfs.org> | 2009-11-20 14:13:39 -0500 |
---|---|---|
committer | Joern Engel <joern@logfs.org> | 2009-11-20 14:13:39 -0500 |
commit | 5db53f3e80dee2d9dff5e534f9e9fe1db17c9936 (patch) | |
tree | 066f2873eeb7eb86466f6389e45892d957db3de2 /include/linux/btree-128.h | |
parent | 66b00a7c93ec782d118d2c03bd599cfd041e80a1 (diff) |
[LogFS] add new flash file system
This is a new flash file system. See
Documentation/filesystems/logfs.txt
Signed-off-by: Joern Engel <joern@logfs.org>
Diffstat (limited to 'include/linux/btree-128.h')
-rw-r--r-- | include/linux/btree-128.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/include/linux/btree-128.h b/include/linux/btree-128.h new file mode 100644 index 000000000000..0b3414c4c928 --- /dev/null +++ b/include/linux/btree-128.h | |||
@@ -0,0 +1,109 @@ | |||
1 | extern struct btree_geo btree_geo128; | ||
2 | |||
3 | struct btree_head128 { struct btree_head h; }; | ||
4 | |||
5 | static inline void btree_init_mempool128(struct btree_head128 *head, | ||
6 | mempool_t *mempool) | ||
7 | { | ||
8 | btree_init_mempool(&head->h, mempool); | ||
9 | } | ||
10 | |||
11 | static inline int btree_init128(struct btree_head128 *head) | ||
12 | { | ||
13 | return btree_init(&head->h); | ||
14 | } | ||
15 | |||
16 | static inline void btree_destroy128(struct btree_head128 *head) | ||
17 | { | ||
18 | btree_destroy(&head->h); | ||
19 | } | ||
20 | |||
21 | static inline void *btree_lookup128(struct btree_head128 *head, u64 k1, u64 k2) | ||
22 | { | ||
23 | u64 key[2] = {k1, k2}; | ||
24 | return btree_lookup(&head->h, &btree_geo128, (unsigned long *)&key); | ||
25 | } | ||
26 | |||
27 | static inline void *btree_get_prev128(struct btree_head128 *head, | ||
28 | u64 *k1, u64 *k2) | ||
29 | { | ||
30 | u64 key[2] = {*k1, *k2}; | ||
31 | void *val; | ||
32 | |||
33 | val = btree_get_prev(&head->h, &btree_geo128, | ||
34 | (unsigned long *)&key); | ||
35 | *k1 = key[0]; | ||
36 | *k2 = key[1]; | ||
37 | return val; | ||
38 | } | ||
39 | |||
40 | static inline int btree_insert128(struct btree_head128 *head, u64 k1, u64 k2, | ||
41 | void *val, gfp_t gfp) | ||
42 | { | ||
43 | u64 key[2] = {k1, k2}; | ||
44 | return btree_insert(&head->h, &btree_geo128, | ||
45 | (unsigned long *)&key, val, gfp); | ||
46 | } | ||
47 | |||
48 | static inline int btree_update128(struct btree_head128 *head, u64 k1, u64 k2, | ||
49 | void *val) | ||
50 | { | ||
51 | u64 key[2] = {k1, k2}; | ||
52 | return btree_update(&head->h, &btree_geo128, | ||
53 | (unsigned long *)&key, val); | ||
54 | } | ||
55 | |||
56 | static inline void *btree_remove128(struct btree_head128 *head, u64 k1, u64 k2) | ||
57 | { | ||
58 | u64 key[2] = {k1, k2}; | ||
59 | return btree_remove(&head->h, &btree_geo128, (unsigned long *)&key); | ||
60 | } | ||
61 | |||
62 | static inline void *btree_last128(struct btree_head128 *head, u64 *k1, u64 *k2) | ||
63 | { | ||
64 | u64 key[2]; | ||
65 | void *val; | ||
66 | |||
67 | val = btree_last(&head->h, &btree_geo128, (unsigned long *)&key[0]); | ||
68 | if (val) { | ||
69 | *k1 = key[0]; | ||
70 | *k2 = key[1]; | ||
71 | } | ||
72 | |||
73 | return val; | ||
74 | } | ||
75 | |||
76 | static inline int btree_merge128(struct btree_head128 *target, | ||
77 | struct btree_head128 *victim, | ||
78 | gfp_t gfp) | ||
79 | { | ||
80 | return btree_merge(&target->h, &victim->h, &btree_geo128, gfp); | ||
81 | } | ||
82 | |||
83 | void visitor128(void *elem, unsigned long opaque, unsigned long *__key, | ||
84 | size_t index, void *__func); | ||
85 | |||
86 | typedef void (*visitor128_t)(void *elem, unsigned long opaque, | ||
87 | u64 key1, u64 key2, size_t index); | ||
88 | |||
89 | static inline size_t btree_visitor128(struct btree_head128 *head, | ||
90 | unsigned long opaque, | ||
91 | visitor128_t func2) | ||
92 | { | ||
93 | return btree_visitor(&head->h, &btree_geo128, opaque, | ||
94 | visitor128, func2); | ||
95 | } | ||
96 | |||
97 | static inline size_t btree_grim_visitor128(struct btree_head128 *head, | ||
98 | unsigned long opaque, | ||
99 | visitor128_t func2) | ||
100 | { | ||
101 | return btree_grim_visitor(&head->h, &btree_geo128, opaque, | ||
102 | visitor128, func2); | ||
103 | } | ||
104 | |||
105 | #define btree_for_each_safe128(head, k1, k2, val) \ | ||
106 | for (val = btree_last128(head, &k1, &k2); \ | ||
107 | val; \ | ||
108 | val = btree_get_prev128(head, &k1, &k2)) | ||
109 | |||