mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
activation: add synchronization point
Resuming of 'error' table entry followed with it's dirrect removal is now troublesame with latest udev as it may skip processing of udev rules for already 'dropped' device nodes. As we cannot 'synchronize' with udev while we know we have devices in suspended state - rework 'cleanup' so it collects nodes for removal into pending_delete list and process the list with synchronization once we are without any suspended nodes.
This commit is contained in:
parent
0bdd6d6240
commit
30a98e4d67
@ -1,5 +1,6 @@
|
||||
Version 2.03.06 -
|
||||
================================
|
||||
Synchronize with udev when dropping snapshot.
|
||||
Add missing device synchronization point before removing pvmove node.
|
||||
Correctly set read_ahead for LVs when pvmove is finished.
|
||||
Remove unsupported OPTIONS+="event_timeout" udev rule from 11-dm-lvm.rules.
|
||||
|
@ -3579,13 +3579,6 @@ static int _clean_tree(struct dev_manager *dm, struct dm_tree_node *root, const
|
||||
const char *name, *uuid;
|
||||
struct dm_str_list *dl;
|
||||
|
||||
/* Deactivate any tracked pending delete nodes */
|
||||
dm_list_iterate_items(dl, &dm->pending_delete) {
|
||||
log_debug_activation("Deleting tracked UUID %s.", dl->str);
|
||||
if (!dm_tree_deactivate_children(root, dl->str, strlen(dl->str)))
|
||||
return_0;
|
||||
}
|
||||
|
||||
while ((child = dm_tree_next_child(&handle, root, 0))) {
|
||||
if (!(name = dm_tree_node_get_name(child)))
|
||||
continue;
|
||||
@ -3606,10 +3599,21 @@ static int _clean_tree(struct dev_manager *dm, struct dm_tree_node *root, const
|
||||
if (non_toplevel_tree_dlid && !strcmp(non_toplevel_tree_dlid, uuid))
|
||||
continue;
|
||||
|
||||
if (!dm_tree_deactivate_children(root, uuid, strlen(uuid)))
|
||||
if (!str_list_add(dm->mem, &dm->pending_delete, uuid))
|
||||
return_0;
|
||||
}
|
||||
|
||||
/* Deactivate any tracked pending delete nodes */
|
||||
if (!dm_list_empty(&dm->pending_delete) && !dm_get_suspended_counter()) {
|
||||
fs_unlock();
|
||||
dm_tree_set_cookie(root, fs_get_cookie());
|
||||
dm_list_iterate_items(dl, &dm->pending_delete) {
|
||||
log_debug_activation("Deleting tracked UUID %s.", dl->str);
|
||||
if (!dm_tree_deactivate_children(root, dl->str, strlen(dl->str)))
|
||||
return_0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user