[lvm-devel] dev-mornfall-lvmcache - snapshot: add lv_is_cow_covering_origin
Petr Rockai
mornfall at fedoraproject.org
Wed Jun 5 12:04:08 UTC 2013
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=77952151af683eda4210cbfe4f9928f736ee92a9
Commit: 77952151af683eda4210cbfe4f9928f736ee92a9
Parent: e992cb253cb4c9bf027dd7852d4399d2b439621c
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Mon May 27 10:18:20 2013 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Mon May 27 10:34:53 2013 +0200
snapshot: add lv_is_cow_covering_origin
Add function to check is size of cow is already big enough
to cover whole origin.
---
WHATS_NEW | 1 +
lib/metadata/metadata-exported.h | 1 +
lib/metadata/snapshot_manip.c | 7 +++++++
3 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 734e86c..7f6c134 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.99 -
===================================
+ Add lv_is_cow_covering_origin() to check if cow covers origin size.
Use libdm dm_get_status_snapshot() to parse snapshot status.
Add detection of mounted fs also for vgchange deactivation.
Replace 'lv_is_active' with more correct/specific variants (e.g. *_locally).
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index c3cb116..cd82368 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -717,6 +717,7 @@ int lv_is_virtual_origin(const struct logical_volume *lv);
int lv_is_cow(const struct logical_volume *lv);
int lv_is_merging_origin(const struct logical_volume *origin);
int lv_is_merging_cow(const struct logical_volume *snapshot);
+int lv_is_cow_covering_origin(const struct logical_volume *lv);
/* Test if given LV is visible from user's perspective */
int lv_is_visible(const struct logical_volume *lv);
diff --git a/lib/metadata/snapshot_manip.c b/lib/metadata/snapshot_manip.c
index 11f60d8..a7f57a6 100644
--- a/lib/metadata/snapshot_manip.c
+++ b/lib/metadata/snapshot_manip.c
@@ -31,6 +31,13 @@ int lv_is_cow(const struct logical_volume *lv)
return (!lv_is_origin(lv) && lv->snapshot) ? 1 : 0;
}
+int lv_is_cow_covering_origin(const struct logical_volume *lv)
+{
+ /* TODO: we need less then 1% of origin size, depends on chunk size */
+ return lv_is_cow(lv) ?
+ (origin_from_cow(lv)->size * UINT64_C(101) <= lv->size * UINT64_C(100)) : 0;
+}
+
int lv_is_visible(const struct logical_volume *lv)
{
if (lv->status & SNAPSHOT)
More information about the lvm-devel
mailing list