1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Fix regex optimiser not to ignore RHS of OR nodes in _find_leftmost_common.

This commit is contained in:
Alasdair Kergon 2010-11-02 19:56:33 +00:00
parent 2955b913ea
commit 4b429b6c33
2 changed files with 8 additions and 4 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.76 -
===================================
Fix regex optimiser not to ignore RHS of OR nodes in _find_leftmost_common.
Fix handling of online filesystem resize (using new fsadm return code).
Add DIAGNOSTICS section to fsadm man page.
Modify fsadm to return different status code for check of mounted filesystem.

View File

@ -473,16 +473,19 @@ static int _find_leftmost_common(struct rx_node *or,
unsigned left_depth = _depth(left, leftmost);
unsigned right_depth = _depth(right, leftmost);
while (left_depth > right_depth) {
while (left_depth > right_depth && left->type != OR) {
left = LEFT(left);
left_depth--;
}
while (right_depth > left_depth) {
while (right_depth > left_depth && right->type != OR) {
right = LEFT(right);
right_depth--;
}
if (left_depth != right_depth)
return 0;
while (left_depth) {
if (left->type == CAT && right->type == CAT) {
if (_nodes_equal(LEFT(left), LEFT(right))) {
@ -491,6 +494,8 @@ static int _find_leftmost_common(struct rx_node *or,
return 1;
}
}
if (left->type == OR || right->type == OR)
break;
left = LEFT(left);
right = LEFT(right);
left_depth--;
@ -568,7 +573,6 @@ static struct rx_node *_pass(struct dm_pool *mem,
case QUEST:
if (!(r->left = _pass(mem, r->left, changed)))
return_NULL;
break;
case OR:
/* It's important we optimise sub nodes first */
@ -577,7 +581,6 @@ static struct rx_node *_pass(struct dm_pool *mem,
if (!(r->right = _pass(mem, r->right, changed)))
return_NULL;
/*
* If rotate_ors changes the tree, left and right are stale,
* so just set 'changed' to repeat the search.