Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 345817
b: refs/heads/master
c: d0e22a2
h: refs/heads/master
i:
  345815: 0fc23e9
v: v3
  • Loading branch information
Andreas Gruenbacher authored and Philipp Reisner committed Oct 14, 2011
1 parent ee461f3 commit abd49e4
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: fcefa62e4c26e70c70b9e8252a4bc9b9031a4182
refs/heads/master: d0e22a260c5142171c730436664febb045b9f0f0
18 changes: 18 additions & 0 deletions trunk/drivers/block/drbd/drbd_interval.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,21 @@ drbd_find_overlap(struct rb_root *root, sector_t sector, unsigned int size)
}
return overlap;
}

struct drbd_interval *
drbd_next_overlap(struct drbd_interval *i, sector_t sector, unsigned int size)
{
sector_t end = sector + (size >> 9);
struct rb_node *node;

for (;;) {
node = rb_next(&i->rb);
if (!node)
return NULL;
i = rb_entry(node, struct drbd_interval, rb);
if (i->sector >= end)
return NULL;
if (sector < i->sector + (i->size >> 9))
return i;
}
}
16 changes: 12 additions & 4 deletions trunk/drivers/block/drbd/drbd_interval.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,18 @@ static inline bool drbd_interval_empty(struct drbd_interval *i)
return RB_EMPTY_NODE(&i->rb);
}

bool drbd_insert_interval(struct rb_root *, struct drbd_interval *);
bool drbd_contains_interval(struct rb_root *, sector_t, struct drbd_interval *);
void drbd_remove_interval(struct rb_root *, struct drbd_interval *);
struct drbd_interval *drbd_find_overlap(struct rb_root *, sector_t,
extern bool drbd_insert_interval(struct rb_root *, struct drbd_interval *);
extern bool drbd_contains_interval(struct rb_root *, sector_t,
struct drbd_interval *);
extern void drbd_remove_interval(struct rb_root *, struct drbd_interval *);
extern struct drbd_interval *drbd_find_overlap(struct rb_root *, sector_t,
unsigned int);
extern struct drbd_interval *drbd_next_overlap(struct drbd_interval *, sector_t,
unsigned int);

#define drbd_for_each_overlap(i, root, sector, size) \
for (i = drbd_find_overlap(root, sector, size); \
i; \
i = drbd_next_overlap(i, sector, size))

#endif /* __DRBD_INTERVAL_H */

0 comments on commit abd49e4

Please sign in to comment.