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