[lvm-devel] master - add md component check in vg_read based on size
David Teigland
teigland at sourceware.org
Fri May 3 19:39:53 UTC 2019
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=607858538132a33a27039e0ff4796b1a7d9f4f32
Commit: 607858538132a33a27039e0ff4796b1a7d9f4f32
Parent: ac627fd1cec77a8334b7e48c3cb8f3efff50fb3c
Author: David Teigland <teigland at redhat.com>
AuthorDate: Thu May 2 16:41:42 2019 -0500
Committer: David Teigland <teigland at redhat.com>
CommitterDate: Fri May 3 14:39:42 2019 -0500
add md component check in vg_read based on size
If an md component is not excluded by other means and
vg_read is used to read metadata from it, then this new
check compares the device size with the PV size, and runs
a full md check on the device if the sizes don't match.
---
lib/format_text/import_vsn1.c | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/lib/format_text/import_vsn1.c b/lib/format_text/import_vsn1.c
index c9b9275..79c73ae 100644
--- a/lib/format_text/import_vsn1.c
+++ b/lib/format_text/import_vsn1.c
@@ -292,6 +292,18 @@ static int _read_pv(struct format_instance *fid,
pv->pe_align = 0;
pv->fmt = fid->fmt;
+ /*
+ * It would be nice to check this earlier, e.g. in or after label scan,
+ * but this is first time we get far enough through the vg metadata to
+ * see the PV size, and can finally compare it with the device size.
+ */
+ if (pv->dev && (pv->size != pv->dev->size)) {
+ if (dev_is_md(pv->dev, NULL, 1)) {
+ log_warn("WARNING: device %s is an md component, ignoring PV.", dev_name(pv->dev));
+ return_0;
+ }
+ }
+
/* Fix up pv size if missing or impossibly large */
if ((!pv->size || pv->size > (1ULL << 62)) && pv->dev) {
if (!dev_get_size(pv->dev, &pv->size)) {
More information about the lvm-devel
mailing list