Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:dirkmueller:acdc:as_python3_module
lvm2.30299
bug-1158628_05-activation-add-synchronization-p...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bug-1158628_05-activation-add-synchronization-point.patch of Package lvm2.30299
From 30a98e4d6710a543692d40d11428ae4baea11b7b Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac <zkabelac@redhat.com> Date: Fri, 16 Aug 2019 23:49:59 +0200 Subject: [PATCH] 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. --- lib/activate/dev_manager.c | 20 ++++++++++++-------- 1 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c index b218225bb2..3168e88031 100644 --- a/lib/activate/dev_manager.c +++ b/lib/activate/dev_manager.c @@ -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; } -- 2.24.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor