Merge pull request #424 from robertbaldyga/rbtree-fix-swap-with-root

rbtree: Fix swapping out-of-tree node with root
This commit is contained in:
Robert Baldyga 2020-11-30 17:16:11 +01:00 committed by GitHub
commit 242e70a868
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 2 deletions

View File

@ -73,7 +73,7 @@ void ocf_core_seq_cutoff_init(ocf_core_t core)
for (i = 0; i < OCF_SEQ_CUTOFF_MAX_STREAMS; i++) { for (i = 0; i < OCF_SEQ_CUTOFF_MAX_STREAMS; i++) {
stream = &core->seq_cutoff.streams[i]; stream = &core->seq_cutoff.streams[i];
stream->last = 0; stream->last = 4096 * i;
stream->bytes = 0; stream->bytes = 0;
stream->rw = 0; stream->rw = 0;
ocf_rb_tree_insert(&core->seq_cutoff.tree, &stream->node); ocf_rb_tree_insert(&core->seq_cutoff.tree, &stream->node);

View File

@ -192,6 +192,10 @@ static void ocf_rb_tree_update_children(struct ocf_rb_node *node)
node->right->parent = node; node->right->parent = node;
} }
/*
* Note: When swapping with out-of-tree element, the tree member must go
* as node1 and out-of-tree item as node2.
*/
static void ocf_rb_tree_swap(struct ocf_rb_tree *tree, static void ocf_rb_tree_swap(struct ocf_rb_tree *tree,
struct ocf_rb_node *node1, struct ocf_rb_node *node2) struct ocf_rb_node *node1, struct ocf_rb_node *node2)
{ {
@ -218,8 +222,8 @@ static void ocf_rb_tree_swap(struct ocf_rb_tree *tree,
ocf_rb_tree_update_children(node1); ocf_rb_tree_update_children(node1);
ocf_rb_tree_update_children(node2); ocf_rb_tree_update_children(node2);
ocf_rb_tree_update_parent(tree, node2->parent, node1, node2);
ocf_rb_tree_update_parent(tree, node1->parent, node2, node1); ocf_rb_tree_update_parent(tree, node1->parent, node2, node1);
ocf_rb_tree_update_parent(tree, node2->parent, node1, node2);
} }
static struct ocf_rb_node *ocf_rb_tree_successor(struct ocf_rb_node *node) static struct ocf_rb_node *ocf_rb_tree_successor(struct ocf_rb_node *node)