/** * drbd_contains_interval - check if a tree contains a given interval * @root: red black tree root * @sector: start sector of @interval * @interval: may be an invalid pointer * * Returns if the tree contains the node @interval with start sector @start. * Does not dereference @interval until @interval is known to be a valid object * in @tree. Returns %false if @interval is in the tree but with a different * sector number.
*/ bool
drbd_contains_interval(struct rb_root *root, sector_t sector, struct drbd_interval *interval)
{ struct rb_node *node = root->rb_node;
/** * drbd_find_overlap - search for an interval overlapping with [sector, sector + size) * @root: red black tree root * @sector: start sector * @size: size, aligned to 512 bytes * * Returns an interval overlapping with [sector, sector + size), or NULL if * there is none. When there is more than one overlapping interval in the * tree, the interval with the lowest start sector is returned, and all other * overlapping intervals will be on the right side of the tree, reachable with * rb_next().
*/ struct drbd_interval *
drbd_find_overlap(struct rb_root *root, sector_t sector, unsignedint size)
{ struct rb_node *node = root->rb_node; struct drbd_interval *overlap = NULL;
sector_t end = sector + (size >> 9);
if (node->rb_left &&
sector < interval_end(node->rb_left)) { /* Overlap if any must be on left side */
node = node->rb_left;
} elseif (here->sector < end &&
sector < here->sector + (here->size >> 9)) {
overlap = here; break;
} elseif (sector >= here->sector) { /* Overlap if any must be on right side */
node = node->rb_right;
} else break;
} return overlap;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.