Commit | Line | Data |
---|---|---|
0939b0e5 AG |
1 | #ifndef __DRBD_INTERVAL_H |
2 | #define __DRBD_INTERVAL_H | |
3 | ||
4 | #include <linux/types.h> | |
5 | #include <linux/rbtree.h> | |
6 | ||
7 | struct drbd_interval { | |
8 | struct rb_node rb; | |
9 | sector_t sector; /* start sector of the interval */ | |
10 | unsigned int size; /* size in bytes */ | |
11 | sector_t end; /* highest interval end in subtree */ | |
5e472264 | 12 | int local:1 /* local or remote request? */; |
53840641 | 13 | int waiting:1; |
0939b0e5 AG |
14 | }; |
15 | ||
16 | static inline void drbd_clear_interval(struct drbd_interval *i) | |
17 | { | |
18 | RB_CLEAR_NODE(&i->rb); | |
19 | } | |
20 | ||
21 | static inline bool drbd_interval_empty(struct drbd_interval *i) | |
22 | { | |
23 | return RB_EMPTY_NODE(&i->rb); | |
24 | } | |
25 | ||
d0e22a26 AG |
26 | extern bool drbd_insert_interval(struct rb_root *, struct drbd_interval *); |
27 | extern bool drbd_contains_interval(struct rb_root *, sector_t, | |
28 | struct drbd_interval *); | |
29 | extern void drbd_remove_interval(struct rb_root *, struct drbd_interval *); | |
30 | extern struct drbd_interval *drbd_find_overlap(struct rb_root *, sector_t, | |
0939b0e5 | 31 | unsigned int); |
d0e22a26 AG |
32 | extern struct drbd_interval *drbd_next_overlap(struct drbd_interval *, sector_t, |
33 | unsigned int); | |
34 | ||
35 | #define drbd_for_each_overlap(i, root, sector, size) \ | |
36 | for (i = drbd_find_overlap(root, sector, size); \ | |
37 | i; \ | |
38 | i = drbd_next_overlap(i, sector, size)) | |
0939b0e5 AG |
39 | |
40 | #endif /* __DRBD_INTERVAL_H */ |