[lvm-devel] master - cache: cache segment is non-discardable
Zdenek Kabelac
zkabelac at fedoraproject.org
Tue Apr 1 18:55:59 UTC 2014
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=0a15a210a532f7d1d46b042adbd8d3c65793f103
Commit: 0a15a210a532f7d1d46b042adbd8d3c65793f103
Parent: a018c57f0bd36f1b56c67a2afe5254e6da8251b7
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Tue Apr 1 17:57:14 2014 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Tue Apr 1 20:17:10 2014 +0200
cache: cache segment is non-discardable
Since cache segment is purely virtual mapping, it has nothing for
discard. Discardable is cache origin here which is now
properly removed on 'delete' phase.
Plain lv_empty() call needs to only detach cache origin and leave
origin unchanged.
---
lib/metadata/lv_manip.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 17933a2..618c1a1 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -561,8 +561,7 @@ static int _release_and_discard_lv_segment_area(struct lv_segment *seg, uint32_t
return 1;
}
- if (seg_is_cache(seg) ||
- (seg_lv(seg, s)->status & MIRROR_IMAGE) ||
+ if ((seg_lv(seg, s)->status & MIRROR_IMAGE) ||
(seg_lv(seg, s)->status & THIN_POOL_DATA) ||
(seg_lv(seg, s)->status & CACHE_POOL_DATA)) {
if (!lv_reduce(seg_lv(seg, s), area_reduction))
@@ -814,6 +813,10 @@ static int _lv_reduce(struct logical_volume *lv, uint32_t extents, int delete)
if (seg->metadata_lv && !lv_remove(seg->metadata_lv))
return_0;
+ /* Remove cache origin only when removing (not on lv_empty()) */
+ if (delete && seg_is_cache(seg) && !lv_remove(seg_lv(seg, 0)))
+ return_0;
+
if (seg->pool_lv && !detach_pool_lv(seg))
return_0;
More information about the lvm-devel
mailing list