summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2019-08-26 13:28:00 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2019-08-26 15:32:12 +0200
commitc98e34e4d0edbcb2594e93f06183838de0c6e2bc (patch)
tree1afe4f74ccd7fe14c26ae2015bcf79ade1ea343a
parentaf0b84ccc850d619eddef5112753731abce099ed (diff)
downloadlvm2-c98e34e4d0edbcb2594e93f06183838de0c6e2bc.tar.gz
cache: improve vgremove loop
Support internal removal of 'cache origin' volume - which we do not normally expose to a user - however internal processing loops may hit this condition (depending on order of list LVs). So when this operation is internally requested - we automatically try to remove it's 'holding' LV (cache LV) - which will also remove the origin.
-rw-r--r--WHATS_NEW1
-rw-r--r--lib/metadata/lv_manip.c7
2 files changed, 8 insertions, 0 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 0b48e032b..cb93bbef1 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.03.06 -
================================
+ Improve internal removal of cached devices.
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.
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 6aee947b9..af3a16fe2 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -6544,6 +6544,13 @@ int lv_remove_with_dependencies(struct cmd_context *cmd, struct logical_volume *
return 0;
}
+ if (lv_is_cache_origin(lv)) {
+ if (!_lv_remove_segs_using_this_lv(cmd, lv, force, level, "cache origin"))
+ return_0;
+ /* Removal of cache LV also removes caching origin */
+ return 1;
+ }
+
if (lv_is_external_origin(lv) &&
!_lv_remove_segs_using_this_lv(cmd, lv, force, level, "external origin"))
return_0;