diff options
author | Dimitri John Ledkov <xnox@ubuntu.com> | 2017-07-31 14:54:24 +0100 |
---|---|---|
committer | Dimitri John Ledkov <xnox@ubuntu.com> | 2017-07-31 14:54:24 +0100 |
commit | 6a0440391da7a99ffab94ccc66264af9b5f3ce34 (patch) | |
tree | 1c7cf4f07b08c4965ab19819ebce367be16fb980 /ulist.h | |
parent | 5f2e2384443a09e3f1fec71940e9e32b70789102 (diff) |
New upstream release.
Diffstat (limited to 'ulist.h')
-rw-r--r-- | ulist.h | 81 |
1 files changed, 0 insertions, 81 deletions
diff --git a/ulist.h b/ulist.h deleted file mode 100644 index 88f5b826..00000000 --- a/ulist.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2011 STRATO AG - * written by Arne Jansen <sensille@gmx.net> - * Distributed under the GNU GPL license version 2. - * - */ - -#ifndef __ULIST_H__ -#define __ULIST_H__ - -#include "kerncompat.h" -#include "list.h" -#include "rbtree.h" - -/* - * ulist is a generic data structure to hold a collection of unique u64 - * values. The only operations it supports is adding to the list and - * enumerating it. - * It is possible to store an auxiliary value along with the key. - * - */ -struct ulist_iterator { -#ifdef CONFIG_BTRFS_DEBUG - int i; -#endif - struct list_head *cur_list; /* hint to start search */ -}; - -/* - * element of the list - */ -struct ulist_node { - u64 val; /* value to store */ - u64 aux; /* auxiliary value saved along with the val */ - -#ifdef CONFIG_BTRFS_DEBUG - int seqnum; /* sequence number this node is added */ -#endif - - struct list_head list; /* used to link node */ - struct rb_node rb_node; /* used to speed up search */ -}; - -struct ulist { - /* - * number of elements stored in list - */ - unsigned long nnodes; - - struct list_head nodes; - struct rb_root root; -}; - -void ulist_init(struct ulist *ulist); -void ulist_reinit(struct ulist *ulist); -struct ulist *ulist_alloc(gfp_t gfp_mask); -void ulist_free(struct ulist *ulist); -int ulist_add(struct ulist *ulist, u64 val, u64 aux, gfp_t gfp_mask); -int ulist_add_merge(struct ulist *ulist, u64 val, u64 aux, - u64 *old_aux, gfp_t gfp_mask); - -/* just like ulist_add_merge() but take a pointer for the aux data */ -static inline int ulist_add_merge_ptr(struct ulist *ulist, u64 val, void *aux, - void **old_aux, gfp_t gfp_mask) -{ -#if BITS_PER_LONG == 32 - u64 old64 = (uintptr_t)*old_aux; - int ret = ulist_add_merge(ulist, val, (uintptr_t)aux, &old64, gfp_mask); - *old_aux = (void *)((uintptr_t)old64); - return ret; -#else - return ulist_add_merge(ulist, val, (u64)aux, (u64 *)old_aux, gfp_mask); -#endif -} - -struct ulist_node *ulist_next(struct ulist *ulist, - struct ulist_iterator *uiter); - -#define ULIST_ITER_INIT(uiter) ((uiter)->cur_list = NULL) - -#endif |