[lvm-devel] master - cache: fix order of metadata change
Zdenek Kabelac
zkabelac at fedoraproject.org
Tue Apr 1 18:56:03 UTC 2014
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=e72dea55bf3ba3b03014b2f04edeb048ade296eb
Commit: e72dea55bf3ba3b03014b2f04edeb048ade296eb
Parent: d3004479cc0fa1fac3bd340cfb0c306a1f088280
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Tue Apr 1 18:08:38 2014 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Tue Apr 1 20:17:10 2014 +0200
cache: fix order of metadata change
Start to change metadata after they are archived.
And since cache_pool is virtual skip deactivation
call for this LV.
---
lib/metadata/lv_manip.c | 29 ++++++++++++-----------------
1 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index b939479..2da6ae1 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -4688,21 +4688,6 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
} else if (lv_is_thin_volume(lv))
pool_lv = first_seg(lv)->pool_lv;
- /*
- * If we are removing a cache_pool, we must first unlink
- * it from any origins (i.e. remove the cache layer).
- *
- * If the cache_pool is not linked, we can simply proceed
- * to remove it.
- */
- if (lv_is_cache_pool(lv) && !dm_list_empty(&lv->segs_using_this_lv)) {
- if (!(cache_seg = get_only_segment_using_this_lv(lv)))
- return_0;
-
- if (!lv_cache_remove(cache_seg->lv))
- return_0;
- }
-
if (lv_is_cache_pool_data(lv) || lv_is_cache_pool_metadata(lv)) {
log_error("Can't remove logical volume %s used by a cache_pool.",
lv->name);
@@ -4760,8 +4745,18 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
return_0;
}
- /* FIXME Review and fix the snapshot error paths! */
- if (!deactivate_lv(cmd, lv)) {
+ if (lv_is_cache_pool(lv)) {
+ /* Cache pool removal drops cache layer
+ * If the cache pool is not linked, we can simply remove it. */
+ if (!dm_list_empty(&lv->segs_using_this_lv)) {
+ if (!(cache_seg = get_only_segment_using_this_lv(lv)))
+ return_0;
+ /* TODO: polling */
+ if (!lv_cache_remove(cache_seg->lv))
+ return_0;
+ }
+ } else if (!deactivate_lv(cmd, lv)) {
+ /* FIXME Review and fix the snapshot error paths! */
log_error("Unable to deactivate logical volume \"%s\"",
lv->name);
return 0;
More information about the lvm-devel
mailing list