[lvm-devel] master - format: format_text: add pv_needs_rewrite to format_handler and implemention for format_text
Peter Rajnoha
prajnoha at fedoraproject.org
Mon Feb 15 12:08:53 UTC 2016
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=9b9f1ae7726c2ee0e7eda76cd519f7d4921a12d9
Commit: 9b9f1ae7726c2ee0e7eda76cd519f7d4921a12d9
Parent: 08de88535e4b06906507abf7ab79bf26be6469f8
Author: Peter Rajnoha <prajnoha at redhat.com>
AuthorDate: Fri Feb 12 13:53:06 2016 +0100
Committer: Peter Rajnoha <prajnoha at redhat.com>
CommitterDate: Mon Feb 15 12:44:46 2016 +0100
format: format_text: add pv_needs_rewrite to format_handler and implemention for format_text
---
lib/format_text/format-text.c | 22 ++++++++++++++++++++++
lib/metadata/metadata.h | 9 +++++++++
2 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/lib/format_text/format-text.c b/lib/format_text/format-text.c
index 7202658..666357c 100644
--- a/lib/format_text/format-text.c
+++ b/lib/format_text/format-text.c
@@ -1439,6 +1439,27 @@ static int _text_pv_write(const struct format_type *fmt, struct physical_volume
return 1;
}
+static int _text_pv_needs_rewrite(const struct format_type *fmt, struct physical_volume *pv,
+ int *needs_rewrite)
+{
+ struct lvmcache_info *info;
+ uint32_t ext_vsn;
+
+ *needs_rewrite = 0;
+
+ if (!(info = lvmcache_info_from_pvid((const char *)&pv->id, 0))) {
+ log_error("Failed to find cached info for PV %s.", pv_dev_name(pv));
+ return 0;
+ }
+
+ ext_vsn = lvmcache_ext_version(info);
+
+ if (ext_vsn < PV_HEADER_EXTENSION_VSN)
+ *needs_rewrite = 1;
+
+ return 1;
+}
+
static int _add_raw(struct dm_list *raw_list, struct device_area *dev_area)
{
struct raw_list *rl;
@@ -2384,6 +2405,7 @@ static struct format_handler _text_handler = {
.pv_remove_metadata_area = _text_pv_remove_metadata_area,
.pv_resize = _text_pv_resize,
.pv_write = _text_pv_write,
+ .pv_needs_rewrite = _text_pv_needs_rewrite,
.vg_setup = _text_vg_setup,
.lv_setup = _text_lv_setup,
.create_instance = _text_create_text_instance,
diff --git a/lib/metadata/metadata.h b/lib/metadata/metadata.h
index 3f5f5ae..f2b62e4 100644
--- a/lib/metadata/metadata.h
+++ b/lib/metadata/metadata.h
@@ -303,6 +303,15 @@ struct format_handler {
struct physical_volume * pv);
/*
+ * Check if PV needs rewriting. This is used to check whether there are any
+ * format-specific changes before actually writing the PV (by calling pv_write).
+ * With this, we can call pv_write conditionally only if it's really needed.
+ */
+ int (*pv_needs_rewrite) (const struct format_type *fmt,
+ struct physical_volume *pv,
+ int *needs_rewrite);
+
+ /*
* Tweak an already filled out a lv eg, check there
* aren't too many extents.
*/
More information about the lvm-devel
mailing list