[lvm-devel] master - thin: add helper functions
Zdenek Kabelac
zkabelac at fedoraproject.org
Tue Jun 11 12:09:08 UTC 2013
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=72c3ae253e52b896795cc0769860c4fcd82ef244
Commit: 72c3ae253e52b896795cc0769860c4fcd82ef244
Parent: 55a3859632c861e8a3bd07a7c848fdb1901e0a05
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Tue Jun 11 12:32:01 2013 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Tue Jun 11 14:03:30 2013 +0200
thin: add helper functions
Add find_pool_lv() and pool_can_resize_metadata().
---
WHATS_NEW | 1 +
lib/metadata/metadata-exported.h | 2 ++
lib/metadata/thin_manip.c | 32 ++++++++++++++++++++++++++++++++
3 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index f85730c..084738d 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.99 -
===================================
+ Add helper functions find_pool_lv() and pool_can_resize_metadata().
Add detection for thin pool metadata resize kernel support.
Report lvs volume type 'e' with higher priority.
Report lvs volume type 'o' also for external origin volumes.
diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index cfa5ad8..5fb5b6c 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -578,7 +578,9 @@ int lv_rename_update(struct cmd_context *cmd, struct logical_volume *lv,
uint64_t extents_from_size(struct cmd_context *cmd, uint64_t size,
uint32_t extent_size);
+struct logical_volume *find_pool_lv(struct logical_volume *lv);
int pool_is_active(const struct logical_volume *pool_lv);
+int pool_can_resize_metadata(const struct logical_volume *pool_lv);
int update_pool_lv(struct logical_volume *lv, int activate);
int update_pool_params(struct cmd_context *cmd, unsigned attr, int passed_args,
uint32_t data_extents, uint32_t extent_size,
diff --git a/lib/metadata/thin_manip.c b/lib/metadata/thin_manip.c
index 1239af9..37b5d77 100644
--- a/lib/metadata/thin_manip.c
+++ b/lib/metadata/thin_manip.c
@@ -309,6 +309,28 @@ int pool_is_active(const struct logical_volume *lv)
return 0;
}
+int pool_can_resize_metadata(const struct logical_volume *lv)
+{
+ static unsigned attr = 0U;
+ struct lv_segment *seg;
+
+ if (!lv_is_thin_pool(lv)) {
+ log_error(INTERNAL_ERROR "LV %s is not thin pool.", lv->name);
+ return 0;
+ }
+
+ seg = first_seg(lv);
+ if ((attr == 0U) && activation() && seg->segtype &&
+ seg->segtype->ops->target_present &&
+ !seg->segtype->ops->target_present(lv->vg->cmd, NULL, &attr)) {
+ log_error("%s: Required device-mapper target(s) not "
+ "detected in your kernel", seg->segtype->name);
+ return 0;
+ }
+
+ return (attr & THIN_FEATURE_METADATA_RESIZE) ? 1 : 0;
+}
+
int pool_below_threshold(const struct lv_segment *pool_seg)
{
percent_t percent;
@@ -352,6 +374,16 @@ struct lv_segment *find_pool_seg(const struct lv_segment *seg)
return pool_seg;
}
+struct logical_volume *find_pool_lv(struct logical_volume *lv)
+{
+ struct lv_segment *seg;
+
+ if (!(seg = find_pool_seg(first_seg(lv))))
+ return_NULL;
+
+ return seg->lv;
+}
+
/*
* Find a free device_id for given thin_pool segment.
*
More information about the lvm-devel
mailing list