Merge branch 'work.set_fs' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[sfrench/cifs-2.6.git] / include / linux / interval_tree.h
1 #ifndef _LINUX_INTERVAL_TREE_H
2 #define _LINUX_INTERVAL_TREE_H
3
4 #include <linux/rbtree.h>
5
6 struct interval_tree_node {
7         struct rb_node rb;
8         unsigned long start;    /* Start of interval */
9         unsigned long last;     /* Last location _in_ interval */
10         unsigned long __subtree_last;
11 };
12
13 extern void
14 interval_tree_insert(struct interval_tree_node *node,
15                      struct rb_root_cached *root);
16
17 extern void
18 interval_tree_remove(struct interval_tree_node *node,
19                      struct rb_root_cached *root);
20
21 extern struct interval_tree_node *
22 interval_tree_iter_first(struct rb_root_cached *root,
23                          unsigned long start, unsigned long last);
24
25 extern struct interval_tree_node *
26 interval_tree_iter_next(struct interval_tree_node *node,
27                         unsigned long start, unsigned long last);
28
29 #endif  /* _LINUX_INTERVAL_TREE_H */