1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-10 16:58:47 +03:00

device_mapper: reduce unnecessary looping passed

While looping through the list of nodes, check if there is higher
priority present and another iteration is still needed.
This commit is contained in:
Zdenek Kabelac 2023-01-30 14:31:04 +01:00
parent f89c369a01
commit 85aa236946

View File

@ -2040,7 +2040,7 @@ int dm_tree_activate_children(struct dm_tree_node *dnode,
struct dm_tree_node *child = dnode; struct dm_tree_node *child = dnode;
const char *name; const char *name;
const char *uuid; const char *uuid;
int priority; int priority, next_priority;
/* Activate children first */ /* Activate children first */
while ((child = dm_tree_next_child(&handle, dnode, 0))) { while ((child = dm_tree_next_child(&handle, dnode, 0))) {
@ -2058,12 +2058,16 @@ int dm_tree_activate_children(struct dm_tree_node *dnode,
} }
handle = NULL; handle = NULL;
for (priority = 0; priority < 3; priority++) { for (priority = 0; priority < 3; priority++) {
awaiting_peer_rename = 0; awaiting_peer_rename = 0;
next_priority = 0;
while ((child = dm_tree_next_child(&handle, dnode, 0))) { while ((child = dm_tree_next_child(&handle, dnode, 0))) {
if (priority != child->activation_priority) if (priority != child->activation_priority) {
if ((next_priority < child->activation_priority) &&
(child->activation_priority > priority))
next_priority = child->activation_priority;
continue; continue;
}
if (!(uuid = dm_tree_node_get_uuid(child))) { if (!(uuid = dm_tree_node_get_uuid(child))) {
stack; stack;
@ -2121,6 +2125,8 @@ int dm_tree_activate_children(struct dm_tree_node *dnode,
} }
if (awaiting_peer_rename) if (awaiting_peer_rename)
priority--; /* redo priority level */ priority--; /* redo priority level */
else if (!next_priority)
break; /* no more work, higher priority was not found in the chain */
} }
return r; return r;