1 /* SPDX-License-Identifier: GPL-2.0 */ 2 extern struct btree_geo btree_geo128; 3 4 struct btree_head128 { struct btree_head h; }; 5 6 static inline void btree_init_mempool128(struct btree_head128 *head, 7 mempool_t *mempool) 8 { 9 btree_init_mempool(&head->h, mempool); 10 } 11 12 static inline int btree_init128(struct btree_head128 *head) 13 { 14 return btree_init(&head->h); 15 } 16 17 static inline void btree_destroy128(struct btree_head128 *head) 18 { 19 btree_destroy(&head->h); 20 } 21 22 static inline void *btree_lookup128(struct btree_head128 *head, u64 k1, u64 k2) 23 { 24 u64 key[2] = {k1, k2}; 25 return btree_lookup(&head->h, &btree_geo128, (unsigned long *)&key); 26 } 27 28 static inline void *btree_get_prev128(struct btree_head128 *head, 29 u64 *k1, u64 *k2) 30 { 31 u64 key[2] = {*k1, *k2}; 32 void *val; 33 34 val = btree_get_prev(&head->h, &btree_geo128, 35 (unsigned long *)&key); 36 *k1 = key[0]; 37 *k2 = key[1]; 38 return val; 39 } 40 41 static inline int btree_insert128(struct btree_head128 *head, u64 k1, u64 k2, 42 void *val, gfp_t gfp) 43 { 44 u64 key[2] = {k1, k2}; 45 return btree_insert(&head->h, &btree_geo128, 46 (unsigned long *)&key, val, gfp); 47 } 48 49 static inline int btree_update128(struct btree_head128 *head, u64 k1, u64 k2, 50 void *val) 51 { 52 u64 key[2] = {k1, k2}; 53 return btree_update(&head->h, &btree_geo128, 54 (unsigned long *)&key, val); 55 } 56 57 static inline void *btree_remove128(struct btree_head128 *head, u64 k1, u64 k2) 58 { 59 u64 key[2] = {k1, k2}; 60 return btree_remove(&head->h, &btree_geo128, (unsigned long *)&key); 61 } 62 63 static inline void *btree_last128(struct btree_head128 *head, u64 *k1, u64 *k2) 64 { 65 u64 key[2]; 66 void *val; 67 68 val = btree_last(&head->h, &btree_geo128, (unsigned long *)&key[0]); 69 if (val) { 70 *k1 = key[0]; 71 *k2 = key[1]; 72 } 73 74 return val; 75 } 76 77 static inline int btree_merge128(struct btree_head128 *target, 78 struct btree_head128 *victim, 79 gfp_t gfp) 80 { 81 return btree_merge(&target->h, &victim->h, &btree_geo128, gfp); 82 } 83 84 void visitor128(void *elem, unsigned long opaque, unsigned long *__key, 85 size_t index, void *__func); 86 87 typedef void (*visitor128_t)(void *elem, unsigned long opaque, 88 u64 key1, u64 key2, size_t index); 89 90 static inline size_t btree_visitor128(struct btree_head128 *head, 91 unsigned long opaque, 92 visitor128_t func2) 93 { 94 return btree_visitor(&head->h, &btree_geo128, opaque, 95 visitor128, func2); 96 } 97 98 static inline size_t btree_grim_visitor128(struct btree_head128 *head, 99 unsigned long opaque, 100 visitor128_t func2) 101 { 102 return btree_grim_visitor(&head->h, &btree_geo128, opaque, 103 visitor128, func2); 104 } 105 106 #define btree_for_each_safe128(head, k1, k2, val) \ 107 for (val = btree_last128(head, &k1, &k2); \ 108 val; \ 109 val = btree_get_prev128(head, &k1, &k2)) 110 111
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.