master - scan: add simple scan to find a pvid
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=94076245df6e99492a7...
Commit: 94076245df6e99492a7a0bb2d8c2f2bc2616259d
Parent: 74ad2cd76f68596c0a718f3a9d951a4c72214691
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Wed Oct 30 15:11:57 2019 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Wed Nov 27 11:13:47 2019 -0600
scan: add simple scan to find a pvid
---
lib/label/label.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++
lib/label/label.h | 2 +
2 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/lib/label/label.c b/lib/label/label.c
index 64b7ca0..680630b 100644
--- a/lib/label/label.c
+++ b/lib/label/label.c
@@ -24,6 +24,8 @@
#include "lib/activate/activate.h"
#include "lib/label/hints.h"
#include "lib/metadata/metadata.h"
+#include "lib/format_text/format-text.h"
+#include "lib/format_text/layout.h"
#include <sys/stat.h>
#include <fcntl.h>
@@ -919,6 +921,74 @@ static void _prepare_open_file_limit(struct cmd_context *cmd, unsigned int num_d
#endif
}
+int label_scan_for_pvid(struct cmd_context *cmd, char *pvid, struct device **dev_out)
+{
+ char buf[LABEL_SIZE] __attribute__((aligned(8)));
+ struct dm_list devs;
+ struct dev_iter *iter;
+ struct device_list *devl, *devl2;
+ struct device *dev;
+ struct pv_header *pvh;
+ int ret = 0;
+
+ dm_list_init(&devs);
+
+ dev_cache_scan();
+
+ if (!(iter = dev_iter_create(cmd->filter, 0))) {
+ log_error("Scanning failed to get devices.");
+ return 0;
+ }
+
+ log_debug_devs("Filtering devices to scan");
+
+ while ((dev = dev_iter_get(cmd, iter))) {
+ if (!(devl = zalloc(sizeof(*devl))))
+ continue;
+ devl->dev = dev;
+ dm_list_add(&devs, &devl->list);
+ };
+ dev_iter_destroy(iter);
+
+ if (!scan_bcache) {
+ if (!_setup_bcache())
+ goto_out;
+ }
+
+ log_debug_devs("Reading labels for pvid");
+
+ dm_list_iterate_items(devl, &devs) {
+ dev = devl->dev;
+
+ memset(buf, 0, sizeof(buf));
+
+ if (!label_scan_open(dev))
+ continue;
+
+ if (!dev_read_bytes(dev, 512, LABEL_SIZE, buf)) {
+ _scan_dev_close(dev);
+ goto out;
+ }
+
+ pvh = (struct pv_header *)(buf + 32);
+
+ if (!memcmp(pvh->pv_uuid, pvid, ID_LEN)) {
+ *dev_out = devl->dev;
+ _scan_dev_close(dev);
+ break;
+ }
+
+ _scan_dev_close(dev);
+ }
+ ret = 1;
+ out:
+ dm_list_iterate_items_safe(devl, devl2, &devs) {
+ dm_list_del(&devl->list);
+ free(devl);
+ }
+ return ret;
+}
+
/*
* Scan devices on the system to discover which are LVM devices.
* Info about the LVM devices (PVs) is saved in lvmcache in a
diff --git a/lib/label/label.h b/lib/label/label.h
index 33a91fa..4108906 100644
--- a/lib/label/label.h
+++ b/lib/label/label.h
@@ -118,6 +118,8 @@ int label_scan_open(struct device *dev);
int label_scan_open_excl(struct device *dev);
int label_scan_open_rw(struct device *dev);
+int label_scan_for_pvid(struct cmd_context *cmd, char *pvid, struct device **dev_out);
+
/*
* Wrappers around bcache equivalents.
* (these make it easier to disable bcache and revert to direct rw if needed)
4 years, 5 months
master - metadata: add vg_from_config_tree
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=74ad2cd76f68596c0a7...
Commit: 74ad2cd76f68596c0a718f3a9d951a4c72214691
Parent: 13c629fb7840e73a38afb9396cae93ea10955a21
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Tue Oct 29 14:31:37 2019 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Wed Nov 27 11:13:47 2019 -0600
metadata: add vg_from_config_tree
Add cmd/fmt args to import functions so that
they can be used without the fid arg which.
---
lib/format_text/import-export.h | 10 +++++++---
lib/format_text/import.c | 28 +++++++++++++++++++++-------
lib/format_text/import_vsn1.c | 16 ++++++++--------
lib/metadata/metadata.c | 4 ++--
lib/metadata/metadata.h | 6 ++++--
5 files changed, 42 insertions(+), 22 deletions(-)
diff --git a/lib/format_text/import-export.h b/lib/format_text/import-export.h
index 0bfc60b..da76852 100644
--- a/lib/format_text/import-export.h
+++ b/lib/format_text/import-export.h
@@ -47,11 +47,15 @@ enum pv_vg_lv_e {
struct text_vg_version_ops {
int (*check_version) (const struct dm_config_tree * cf);
- struct volume_group *(*read_vg) (struct format_instance * fid,
- const struct dm_config_tree *cf,
- unsigned allow_lvmetad_extensions);
+
+ struct volume_group *(*read_vg) (struct cmd_context *cmd,
+ const struct format_type *fmt,
+ struct format_instance *fid,
+ const struct dm_config_tree *cft);
+
void (*read_desc) (struct dm_pool * mem, const struct dm_config_tree *cf,
time_t *when, char **desc);
+
int (*read_vgsummary) (const struct format_type *fmt,
const struct dm_config_tree *cft,
struct lvmcache_vgsummary *vgsummary);
diff --git a/lib/format_text/import.c b/lib/format_text/import.c
index 79276dd..a4ea98b 100644
--- a/lib/format_text/import.c
+++ b/lib/format_text/import.c
@@ -15,6 +15,7 @@
#include "lib/misc/lib.h"
#include "lib/metadata/metadata.h"
+#include "lib/commands/toolcontext.h"
#include "import-export.h"
/* FIXME Use tidier inclusion method */
@@ -181,7 +182,7 @@ struct volume_group *text_read_metadata(struct format_instance *fid,
if (!(*vsn)->check_version(cft))
continue;
- if (!(vg = (*vsn)->read_vg(fid, cft, 0)))
+ if (!(vg = (*vsn)->read_vg(fid->fmt->cmd, fid->fmt, fid, cft)))
goto_out;
(*vsn)->read_desc(vg->vgmem, cft, when, desc);
@@ -210,9 +211,9 @@ struct volume_group *text_read_metadata_file(struct format_instance *fid,
when, desc);
}
-static struct volume_group *_import_vg_from_config_tree(const struct dm_config_tree *cft,
+static struct volume_group *_import_vg_from_config_tree(struct cmd_context *cmd,
struct format_instance *fid,
- unsigned allow_lvmetad_extensions)
+ const struct dm_config_tree *cft)
{
struct volume_group *vg = NULL;
struct text_vg_version_ops **vsn;
@@ -227,7 +228,7 @@ static struct volume_group *_import_vg_from_config_tree(const struct dm_config_t
* The only path to this point uses cached vgmetadata,
* so it can use cached PV state too.
*/
- if (!(vg = (*vsn)->read_vg(fid, cft, allow_lvmetad_extensions)))
+ if (!(vg = (*vsn)->read_vg(cmd, fid->fmt, fid, cft)))
stack;
else {
set_pv_devices(fid, vg, NULL);
@@ -243,8 +244,21 @@ static struct volume_group *_import_vg_from_config_tree(const struct dm_config_t
return vg;
}
-struct volume_group *import_vg_from_config_tree(const struct dm_config_tree *cft,
- struct format_instance *fid)
+struct volume_group *import_vg_from_config_tree(struct cmd_context *cmd,
+ struct format_instance *fid,
+ const struct dm_config_tree *cft)
{
- return _import_vg_from_config_tree(cft, fid, 0);
+ return _import_vg_from_config_tree(cmd, fid, cft);
}
+
+struct volume_group *vg_from_config_tree(struct cmd_context *cmd, const struct dm_config_tree *cft)
+{
+ static struct text_vg_version_ops *ops;
+
+ _init_text_import();
+
+ ops = _text_vsn_list[0];
+
+ return ops->read_vg(cmd, cmd->fmt, NULL, cft);
+}
+
diff --git a/lib/format_text/import_vsn1.c b/lib/format_text/import_vsn1.c
index d7ff786..2bdbfee 100644
--- a/lib/format_text/import_vsn1.c
+++ b/lib/format_text/import_vsn1.c
@@ -993,7 +993,7 @@ static int _read_lvsegs(struct cmd_context *cmd,
}
static int _read_sections(struct cmd_context *cmd,
- struct format_type *fmt,
+ const struct format_type *fmt,
struct format_instance *fid,
struct dm_pool *mem,
const char *section, section_fn fn,
@@ -1016,19 +1016,18 @@ static int _read_sections(struct cmd_context *cmd,
}
for (n = n->child; n; n = n->sib) {
- if (!fn(cmd, fmt, fid, mem, vg, vgsummary, n, vgn, pv_hash, lv_hash))
+ if (!fn(cmd, (struct format_type *)fmt, fid, mem, vg, vgsummary, n, vgn, pv_hash, lv_hash))
return_0;
}
return 1;
}
-static struct volume_group *_read_vg(struct format_instance *fid,
- const struct dm_config_tree *cft,
- unsigned allow_lvmetad_extensions)
+static struct volume_group *_read_vg(struct cmd_context *cmd,
+ const struct format_type *fmt,
+ struct format_instance *fid,
+ const struct dm_config_tree *cft)
{
- struct cmd_context *cmd = fid->fmt->cmd;
- struct format_type *fmt = (struct format_type *)fid->fmt;
struct dm_pool *mem;
const struct dm_config_node *vgn;
const struct dm_config_value *cv;
@@ -1234,7 +1233,8 @@ static struct volume_group *_read_vg(struct format_instance *fid,
dm_hash_destroy(pv_hash);
dm_hash_destroy(lv_hash);
- vg_set_fid(vg, fid);
+ if (fid)
+ vg_set_fid(vg, fid);
/*
* Finished.
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index b12db60..1371b97 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -999,7 +999,7 @@ static int _vg_update_embedded_copy(struct volume_group *vg, struct volume_group
if (!(cft = export_vg_to_config_tree(vg)))
return_0;
- if (!(*vg_embedded = import_vg_from_config_tree(cft, vg->fid))) {
+ if (!(*vg_embedded = import_vg_from_config_tree(vg->cmd, vg->fid, cft))) {
dm_config_destroy(cft);
return_0;
}
@@ -5220,7 +5220,7 @@ struct volume_group *vg_read(struct cmd_context *cmd, const char *vg_name, const
goto out;
}
- if (!(vg->vg_committed = import_vg_from_config_tree(cft, vg->fid)))
+ if (!(vg->vg_committed = import_vg_from_config_tree(cmd, vg->fid, cft)))
log_warn("WARNING: vg_read no vg copy: copy import failed");
dm_config_destroy(cft);
diff --git a/lib/metadata/metadata.h b/lib/metadata/metadata.h
index 377a063..f199fc4 100644
--- a/lib/metadata/metadata.h
+++ b/lib/metadata/metadata.h
@@ -477,8 +477,10 @@ void lv_calculate_readahead(const struct logical_volume *lv, uint32_t *read_ahea
* For internal metadata caching.
*/
struct dm_config_tree *export_vg_to_config_tree(struct volume_group *vg);
-struct volume_group *import_vg_from_config_tree(const struct dm_config_tree *cft,
- struct format_instance *fid);
+struct volume_group *import_vg_from_config_tree(struct cmd_context *cmd,
+ struct format_instance *fid,
+ const struct dm_config_tree *cft);
+struct volume_group *vg_from_config_tree(struct cmd_context *cmd, const struct dm_config_tree *cft);
/*
* Mirroring functions
4 years, 5 months
master - Revert "cov: use zalloc"
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=13c629fb7840e73a38a...
Commit: 13c629fb7840e73a38afb9396cae93ea10955a21
Parent: 39bd9b111bc6d2bcb56dfc5859e691b9c90db4c0
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Nov 14 12:31:31 2019 -0600
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Wed Nov 27 11:13:43 2019 -0600
Revert "cov: use zalloc"
This reverts commit 9af1d63b4d96facb0aa055a44c2f61eac01e13f2.
fixes folded into subsequent pvck commit
---
tools/pvck.c | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/tools/pvck.c b/tools/pvck.c
index ab3f7db..231faf9 100644
--- a/tools/pvck.c
+++ b/tools/pvck.c
@@ -652,8 +652,9 @@ static int _dump_meta_area(struct device *dev, const char *tofile,
if (!tofile)
return_0;
- if (!(meta_buf = zalloc(mda_size)))
+ if (!(meta_buf = malloc(mda_size)))
return_0;
+ memset(meta_buf, 0, mda_size);
if (!dev_read_bytes(dev, mda_offset, mda_size, meta_buf)) {
log_print("CHECK: failed to read metadata area at offset %llu size %llu",
@@ -704,11 +705,12 @@ static int _dump_current_text(struct device *dev,
int ri = rlocn_index; /* 0 or 1 */
int bad = 0;
- if (!(meta_buf = zalloc(meta_size))) {
+ if (!(meta_buf = malloc(meta_size))) {
log_print("CHECK: mda_header_%d.raw_locn[%d] no mem for metadata text size %llu", mn, ri,
(unsigned long long)meta_size);
return 0;
}
+ memset(meta_buf, 0, meta_size);
/*
* Read the metadata text specified by the raw_locn so we can
@@ -1482,8 +1484,9 @@ static int _dump_search(struct cmd_context *cmd,
log_print("Searching for metadata in mda%d at offset %llu size %llu", mda_num,
(unsigned long long)mda_offset, (unsigned long long)mda_size);
- if (!(buf = zalloc(mda_size)))
+ if (!(buf = malloc(mda_size)))
return ECMD_FAILED;
+ memset(buf, 0, mda_size);
if (!dev_read_bytes(dev, mda_offset, mda_size, buf)) {
log_print("CHECK: failed to read metadata area at offset %llu size %llu",
4 years, 5 months
master - Revert "pvck: check result of dev_get_size"
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=39bd9b111bc6d2bcb56...
Commit: 39bd9b111bc6d2bcb56dfc5859e691b9c90db4c0
Parent: 4485b8edca559e9c45311f2a3b88d03bd3223834
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Nov 14 12:31:30 2019 -0600
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Wed Nov 27 11:13:40 2019 -0600
Revert "pvck: check result of dev_get_size"
This reverts commit 1f4968289c9c0e2a1e850317ef173df11938b7f3.
fixes folded into subsequent pvck commit
---
tools/pvck.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/tools/pvck.c b/tools/pvck.c
index c6f6a33..ab3f7db 100644
--- a/tools/pvck.c
+++ b/tools/pvck.c
@@ -1455,8 +1455,7 @@ static int _dump_search(struct cmd_context *cmd,
uint64_t dev_bytes;
uint64_t extra_bytes;
- if (!dev_get_size(dev, &dev_sectors))
- return_ECMD_FAILED;
+ dev_get_size(dev, &dev_sectors);
dev_bytes = dev_sectors * 512;
extra_bytes = dev_bytes % ONE_MB_IN_BYTES;
4 years, 5 months
master - Revert "cov: fix mem leaking buffer"
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=4485b8edca559e9c453...
Commit: 4485b8edca559e9c45311f2a3b88d03bd3223834
Parent: 657d42e87953adcecc37701ee4e04287c30eec96
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Nov 14 12:31:29 2019 -0600
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Wed Nov 27 11:13:36 2019 -0600
Revert "cov: fix mem leaking buffer"
This reverts commit d67ce9e140b5691a3f75a69d6e735eec30603670.
fixes folded into subsequent pvck commit
---
tools/pvck.c | 36 ++++++++++++++----------------------
1 files changed, 14 insertions(+), 22 deletions(-)
diff --git a/tools/pvck.c b/tools/pvck.c
index 90bcafe..c6f6a33 100644
--- a/tools/pvck.c
+++ b/tools/pvck.c
@@ -658,25 +658,20 @@ static int _dump_meta_area(struct device *dev, const char *tofile,
if (!dev_read_bytes(dev, mda_offset, mda_size, meta_buf)) {
log_print("CHECK: failed to read metadata area at offset %llu size %llu",
(unsigned long long)mda_offset, (unsigned long long)mda_size);
- free(meta_buf);
return 0;
}
if (!(fp = fopen(tofile, "wx"))) {
- log_error("Failed to create file %s.", tofile);
- free(meta_buf);
+ log_error("Failed to create file %s", tofile);
return 0;
}
- if (fwrite(meta_buf, mda_size - 512, 1, fp) < (mda_size - 512))
- log_warn("WARNING: Failed to write " FMTu64 " bytes to file %s.", mda_size - 512, tofile);
+ fwrite(meta_buf, mda_size - 512, 1, fp);
- free(meta_buf);
if (fflush(fp))
stack;
if (fclose(fp))
stack;
-
return 1;
}
@@ -724,7 +719,7 @@ static int _dump_current_text(struct device *dev,
* mda_offset + meta_offset.
*/
if (meta_offset + meta_size > mda_size) {
- /* text metadata wraps to start of text metadata area */
+ /* text metadata wraps to start of text metadata area */
uint32_t wrap = (uint32_t) ((meta_offset + meta_size) - mda_size);
off_t offset_a = mda_offset + meta_offset;
uint32_t size_a = meta_size - wrap;
@@ -735,7 +730,6 @@ static int _dump_current_text(struct device *dev,
log_print("CHECK: failed to read metadata text at mda_header_%d.raw_locn[%d].offset %llu size %llu part_a %llu %llu", mn, ri,
(unsigned long long)meta_offset, (unsigned long long)meta_size,
(unsigned long long)offset_a, (unsigned long long)size_a);
- free(meta_buf);
return 0;
}
@@ -743,14 +737,12 @@ static int _dump_current_text(struct device *dev,
log_print("CHECK: failed to read metadata text at mda_header_%d.raw_locn[%d].offset %llu size %llu part_b %llu %llu", mn, ri,
(unsigned long long)meta_offset, (unsigned long long)meta_size,
(unsigned long long)offset_b, (unsigned long long)size_b);
- free(meta_buf);
return 0;
}
} else {
if (!dev_read_bytes(dev, mda_offset + meta_offset, meta_size, meta_buf)) {
log_print("CHECK: failed to read metadata text at mda_header_%d.raw_locn[%d].offset %llu size %llu", mn, ri,
(unsigned long long)meta_offset, (unsigned long long)meta_size);
- free(meta_buf);
return 0;
}
}
@@ -808,9 +800,9 @@ static int _dump_current_text(struct device *dev,
}
out:
- free(meta_buf);
-
- return (!bad) ? 1 : 0;
+ if (bad)
+ return 0;
+ return 1;
}
static int _dump_label_and_pv_header(struct cmd_context *cmd, int print_fields,
@@ -854,7 +846,6 @@ static int _dump_label_and_pv_header(struct cmd_context *cmd, int print_fields,
if (!dev_read_bytes(dev, lh_offset, 512, buf)) {
log_print("CHECK: failed to read label_header at %llu",
(unsigned long long)lh_offset);
- free(buf);
return 0;
}
@@ -1049,9 +1040,9 @@ static int _dump_label_and_pv_header(struct cmd_context *cmd, int print_fields,
(unsigned long long)xlate64(dlocn->size));
}
- free(buf);
-
- return (!bad) ? 1 : 0;
+ if (bad)
+ return 0;
+ return 1;
}
/*
@@ -1104,7 +1095,6 @@ static int _dump_mda_header(struct cmd_context *cmd,
if (!dev_read_bytes(dev, mda_offset, 512, buf)) {
log_print("CHECK: failed to read mda_header at %llu", (unsigned long long)mda_offset);
- free(buf);
return 0;
}
@@ -1195,9 +1185,11 @@ static int _dump_mda_header(struct cmd_context *cmd,
/* Should we also check text metadata if it exists in rlocn1? */
out:
- free(buf);
-
- return (!bad) ? 1 : 0;
+ if (buf)
+ free(buf);
+ if (bad)
+ return 0;
+ return 1;
}
static int _dump_headers(struct cmd_context *cmd,
4 years, 5 months
master - Revert "cov: avoid passing NULL to strstr function"
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=657d42e87953adcecc3...
Commit: 657d42e87953adcecc37701ee4e04287c30eec96
Parent: 595aa1d4526185e0fe52430ce019a07103014b0c
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Nov 14 12:31:28 2019 -0600
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Wed Nov 27 11:13:32 2019 -0600
Revert "cov: avoid passing NULL to strstr function"
This reverts commit 0bad3977df40a70c68778ff0514d0ca712fee402.
fixes folded into subsequent pvck commit
---
tools/pvck.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/tools/pvck.c b/tools/pvck.c
index 9f030c1..90bcafe 100644
--- a/tools/pvck.c
+++ b/tools/pvck.c
@@ -417,11 +417,11 @@ static int _dump_all_text(struct cmd_context *cmd, const char *tofile, struct de
memset(line, 0, sizeof(line));
_copy_line(str1, line, &len);
log_print("%s", line);
- if ((str2 = strstr(str1, "creation_time = "))) {
- memset(line, 0, sizeof(line));
- _copy_line(str2, line, &len);
- log_print("%s\n", line);
- }
+ }
+ if ((str2 = strstr(str1, "creation_time = "))) {
+ memset(line, 0, sizeof(line));
+ _copy_line(str2, line, &len);
+ log_print("%s\n", line);
}
}
4 years, 5 months
master - Revert "cov: check for retvalue"
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=595aa1d4526185e0fe5...
Commit: 595aa1d4526185e0fe52430ce019a07103014b0c
Parent: 98a8099da9e43561a1fe981bbf2866e373f0d07a
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Nov 14 12:31:27 2019 -0600
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Wed Nov 27 11:13:09 2019 -0600
Revert "cov: check for retvalue"
This reverts commit 153e55c20e9a3810a1862314a6465179e1b53931.
fixes folded into subsequent pvck commit
---
tools/pvck.c | 5 +----
1 files changed, 1 insertions(+), 4 deletions(-)
diff --git a/tools/pvck.c b/tools/pvck.c
index 4a267dd..9f030c1 100644
--- a/tools/pvck.c
+++ b/tools/pvck.c
@@ -359,10 +359,7 @@ static int _dump_all_text(struct cmd_context *cmd, const char *tofile, struct de
continue;
}
- if (sscanf(line, "seqno = %u", &seqno) != 1) {
- log_warn("WARNING: Failed to parse seqno.");
- seqno = 0; /* Skip? */
- }
+ sscanf(line, "seqno = %u", &seqno);
/*
* The first three lines look like metadata with
4 years, 5 months
master - scanning: use bool type for _scan_text_mismatch
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=98a8099da9e43561a1f...
Commit: 98a8099da9e43561a1fe981bbf2866e373f0d07a
Parent: b400353c71397954a7cc4c4b52b9570715104773
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Wed Nov 27 09:26:04 2019 -0600
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Wed Nov 27 09:26:49 2019 -0600
scanning: use bool type for _scan_text_mismatch
---
lib/metadata/metadata.c | 20 +++++++-------------
1 files changed, 7 insertions(+), 13 deletions(-)
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 1ac5445..b12db60 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -4577,7 +4577,7 @@ void vg_write_commit_bad_mdas(struct cmd_context *cmd, struct volume_group *vg)
* reread metadata.
*/
-static int _scan_text_mismatch(struct cmd_context *cmd, const char *vgname, const char *vgid)
+static bool _scan_text_mismatch(struct cmd_context *cmd, const char *vgname, const char *vgid)
{
struct dm_list mda_list;
struct mda_list *mdal, *safe;
@@ -4588,7 +4588,7 @@ static int _scan_text_mismatch(struct cmd_context *cmd, const char *vgname, cons
struct raw_locn *rlocn;
struct device *dev;
uint32_t bad_fields;
- int ret = 1;
+ bool ret = true;
/*
* if cmd->can_use_one_scan, check one mda_header is unchanged,
@@ -4610,7 +4610,6 @@ static int _scan_text_mismatch(struct cmd_context *cmd, const char *vgname, cons
if (!(dev = mda_get_device(mda))) {
log_debug("rescan for text mismatch - no mda dev");
- ret = 1;
goto out;
}
@@ -4624,13 +4623,11 @@ static int _scan_text_mismatch(struct cmd_context *cmd, const char *vgname, cons
*/
if (!dev_invalidate_bytes(dev, 4096, 512)) {
log_debug("rescan for text mismatch - cannot invalidate");
- ret = 1;
goto out;
}
if (!(mdah = raw_read_mda_header(cmd->fmt, area, 1, 0, &bad_fields))) {
log_debug("rescan for text mismatch - no mda header");
- ret = 1;
goto out;
}
@@ -4638,18 +4635,16 @@ static int _scan_text_mismatch(struct cmd_context *cmd, const char *vgname, cons
if (bad_fields) {
log_debug("rescan for text mismatch - bad_fields");
- ret = 1;
} else if (rlocn->checksum != mda->scan_text_checksum) {
log_debug("rescan for text checksum mismatch - now %x prev %x",
rlocn->checksum, mda->scan_text_checksum);
- ret = 1;
} else if (rlocn->offset != mda->scan_text_offset) {
log_debug("rescan for text offset mismatch - now %llu prev %llu",
(unsigned long long)rlocn->offset,
(unsigned long long)mda->scan_text_offset);
- ret = 1;
} else {
- ret = 0;
+ /* the common case where fields match and no rescan needed */
+ ret = false;
}
dm_pool_free(cmd->mem, mdah);
@@ -4668,12 +4663,11 @@ static int _scan_text_mismatch(struct cmd_context *cmd, const char *vgname, cons
log_debug("rescan for text mismatch - no mdas");
goto out;
}
-
- ret = 0;
-
out:
if (!ret)
- log_debug("rescan skipped - text offset and checksum unchanged");
+ log_debug("rescan skipped - unchanged offset %llu checksum %x",
+ (unsigned long long)mda->scan_text_offset,
+ mda->scan_text_checksum);
dm_list_iterate_items_safe(mdal, safe, &mda_list) {
dm_list_del(&mdal->list);
4 years, 5 months
master - tests hints: update check for io count
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=b400353c71397954a7c...
Commit: b400353c71397954a7cc4c4b52b9570715104773
Parent: a61272a6f048e56ea75e34ad190af10ff9773c8c
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Tue Nov 26 16:31:38 2019 -0600
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Tue Nov 26 16:52:28 2019 -0600
tests hints: update check for io count
Running a reporting command on a VG now includes one
additional read to check the mda_header for any change
to the vg between scan and lock.
---
test/shell/hints.sh | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/test/shell/hints.sh b/test/shell/hints.sh
index 019912e..f95505a 100644
--- a/test/shell/hints.sh
+++ b/test/shell/hints.sh
@@ -52,15 +52,17 @@ pvs
grep -v -E "$dev1|$dev2" $HINTS > tmptest
not grep scan: tmptest
-# test that 'pvs' submits only two reads, one for each PV in hints
+# test that 'pvs' submits only three reads, one for each PV in hints
+# for initial scan, and one more in vg_read rescan check
if [ -e "/usr/bin/strace" ]; then
strace -e io_submit pvs 2>&1|tee tmptest
-test "$(grep io_submit tmptest | wc -l)" -eq 2
+test "$(grep io_submit tmptest | wc -l)" -eq 3
-# test that 'pvs -a' submits six reads, one for each device
+# test that 'pvs -a' submits seven reads, one for each device,
+# and one more in vg_read rescan check
strace -e io_submit pvs -a 2>&1|tee tmptest
-test "$(grep io_submit tmptest | wc -l)" -eq 6
+test "$(grep io_submit tmptest | wc -l)" -eq 7
fi
#
4 years, 5 months
master - Revert "lvs: disable scanning optimization"
by David Teigland
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=a61272a6f048e56ea75...
Commit: a61272a6f048e56ea75e34ad190af10ff9773c8c
Parent: 0c1316cda876849d5d1375d40e8cdc08db37c2b5
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Tue Nov 26 12:01:24 2019 -0600
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Tue Nov 26 16:52:28 2019 -0600
Revert "lvs: disable scanning optimization"
This reverts commit 7474440d3b540d20eb4f997efeb31b881cc6ac8e.
lvs can use the scanning optimization again since it has
been changed in:
"scanning: optimize by checking text offset and checksum"
---
tools/commands.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/tools/commands.h b/tools/commands.h
index 77cf1fa..c1670ae 100644
--- a/tools/commands.h
+++ b/tools/commands.h
@@ -99,7 +99,7 @@ xx(lvresize,
xx(lvs,
"Display information about logical volumes",
- PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH | ALLOW_HINTS)
+ PERMITTED_READ_ONLY | ALL_VGS_IS_DEFAULT | LOCKD_VG_SH | CAN_USE_ONE_SCAN | ALLOW_HINTS)
xx(lvscan,
"List all logical volumes in all volume groups",
4 years, 5 months