mirror of
git://sourceware.org/git/lvm2.git
synced 2025-02-23 13:57:47 +03:00
tree_action: destroy devices from failing activation
When activation fails - we may leak large tree of partially loaded devices in the dm table (i.e. failure in snapshot activation) The best we can do here is try to deactivate whole device and remove as much inactive table entries as we can.
This commit is contained in:
parent
94137b72ed
commit
24639be558
@ -1,5 +1,6 @@
|
||||
Version 2.02.105 -
|
||||
=====================================
|
||||
Try to remove any unusable devices from dm table when activation fails.
|
||||
Dependency scan counts with snapshots and external origins.
|
||||
Make sure VG extent size is always greater or equal to PV phys. block size.
|
||||
Optimize double call of stat() for cached devices.
|
||||
|
@ -2754,15 +2754,21 @@ static int _tree_action(struct dev_manager *dm, struct logical_volume *lv,
|
||||
goto_out;
|
||||
|
||||
/* Preload any devices required before any suspensions */
|
||||
if (!dm_tree_preload_children(root, dlid, DLID_SIZE))
|
||||
if (!dm_tree_preload_children(root, dlid, DLID_SIZE)) {
|
||||
bad:
|
||||
if (!dm_tree_deactivate_children(root, dlid, DLID_SIZE))
|
||||
stack;
|
||||
if (!_remove_lv_symlinks(dm, root))
|
||||
log_warn("Failed to remove all device symlinks associated with %s.", lv->name);
|
||||
goto_out;
|
||||
}
|
||||
|
||||
if (dm_tree_node_size_changed(root))
|
||||
dm->flush_required = 1;
|
||||
|
||||
if (action == ACTIVATE) {
|
||||
if (!dm_tree_activate_children(root, dlid, DLID_SIZE))
|
||||
goto_out;
|
||||
goto_bad;
|
||||
if (!_create_lv_symlinks(dm, root))
|
||||
log_warn("Failed to create symlinks for %s.", lv->name);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user