master - lvmcache: update lvmcache with alternate device
by David Teigland
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=1dfedcc179b6f7...
Commit: 1dfedcc179b6f7caee1069974ab34ddd111ef01d
Parent: cbdf514bbc3f22453c2c72c913e9161935a22bd8
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Tue May 5 14:02:43 2015 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Fri May 8 11:28:59 2015 -0500
lvmcache: update lvmcache with alternate device
When there are duplicate PVs, and one device
replaces another in lvmcache, use label_read
to update lvmcache for the new device.
---
lib/cache/lvmetad.c | 32 +++++++++++++++++++-------------
1 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c
index 470a7b3..00a84b5 100644
--- a/lib/cache/lvmetad.c
+++ b/lib/cache/lvmetad.c
@@ -269,7 +269,8 @@ static struct lvmcache_info *_pv_populate_lvmcache(struct cmd_context *cmd,
struct dm_config_node *cn,
struct format_type *fmt, dev_t fallback)
{
- struct device *dev, *dev_alternate;
+ struct device *dev, *dev_alternate, *dev_alternate_cache = NULL;
+ struct label *label;
struct id pvid, vgid;
char mda_id[32];
char da_id[32];
@@ -278,7 +279,7 @@ static struct lvmcache_info *_pv_populate_lvmcache(struct cmd_context *cmd,
struct dm_config_node *alt_devices = dm_config_find_node(cn->child, "devices_alternate");
struct dm_config_value *alt_device = NULL;
uint64_t offset, size;
- struct lvmcache_info *info;
+ struct lvmcache_info *info, *info_alternate;
const char *pvid_txt = dm_config_find_str(cn->child, "id", NULL),
*vgid_txt = dm_config_find_str(cn->child, "vgid", NULL),
*vgname = dm_config_find_str(cn->child, "vgname", NULL),
@@ -367,23 +368,28 @@ static struct lvmcache_info *_pv_populate_lvmcache(struct cmd_context *cmd,
while (alt_device) {
dev_alternate = dev_cache_get_by_devt(alt_device->v.i, cmd->filter);
if (dev_alternate) {
- if ((info = lvmcache_add(fmt->labeller, (const char *)&pvid, dev_alternate,
- vgname, (const char *)&vgid, 0))) {
- /*
- * FIXME: when lvmcache_add returns non-NULL,
- * it means that it has made dev_alternate
- * the preferred device in lvmcache.
- * I think that means it should be followed
- * by the same steps done above?
- */
- log_warn("lvmcache only partially updated for alternate device %s", dev_name(dev));
+ if ((info_alternate = lvmcache_add(fmt->labeller, (const char *)&pvid, dev_alternate,
+ vgname, (const char *)&vgid, 0))) {
+ dev_alternate_cache = dev_alternate;
+ info = info_alternate;
}
- } else
+ } else {
log_warn("Duplicate of PV %s dev %s exists on unknown device %"PRId64 ":%" PRId64,
pvid_txt, dev_name(dev), MAJOR(alt_device->v.i), MINOR(alt_device->v.i));
+ }
alt_device = alt_device->next;
}
+ /*
+ * Update lvmcache with the info about the alternate device by
+ * reading its label, which should update lvmcache.
+ */
+ if (dev_alternate_cache) {
+ if (!label_read(dev_alternate_cache, &label, 0)) {
+ log_warn("No PV label found on duplicate device %s.", dev_name(dev_alternate_cache));
+ }
+ }
+
return info;
}
9 years
master - debug: extra validation of passed segment
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=cbdf514bbc3f22...
Commit: cbdf514bbc3f22453c2c72c913e9161935a22bd8
Parent: 29c709f5914ccd9159d84f8920c34b2c6ef51740
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 7 14:04:22 2015 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri May 8 15:15:11 2015 +0200
debug: extra validation of passed segment
Always check if passed segment really is correct cache segment.
(Avoids derefernce of possibly NULL seg->pool_lv).
---
lib/cache_segtype/cache.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/lib/cache_segtype/cache.c b/lib/cache_segtype/cache.c
index afc0ec6..ca30495 100644
--- a/lib/cache_segtype/cache.c
+++ b/lib/cache_segtype/cache.c
@@ -282,9 +282,16 @@ static int _cache_add_target_line(struct dev_manager *dm,
struct dm_tree_node *node, uint64_t len,
uint32_t *pvmove_mirror_count __attribute__((unused)))
{
- struct lv_segment *cache_pool_seg = first_seg(seg->pool_lv);
+ struct lv_segment *cache_pool_seg;
char *metadata_uuid, *data_uuid, *origin_uuid;
+ if (!seg->pool_lv || !seg_is_cache(seg)) {
+ log_error(INTERNAL_ERROR "Passed segment is not cache.");
+ return 0;
+ }
+
+ cache_pool_seg = first_seg(seg->pool_lv);
+
if (!(metadata_uuid = build_dm_uuid(mem, cache_pool_seg->metadata_lv, NULL)))
return_0;
9 years
master - debug: tracing error path
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=29c709f5914ccd...
Commit: 29c709f5914ccd9159d84f8920c34b2c6ef51740
Parent: eadebc3b615c8dec8f99f5e411b01c97b791987b
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 7 12:37:15 2015 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri May 8 15:15:10 2015 +0200
debug: tracing error path
---
lib/metadata/mirror.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/metadata/mirror.c b/lib/metadata/mirror.c
index a0418ce..ff8b657 100644
--- a/lib/metadata/mirror.c
+++ b/lib/metadata/mirror.c
@@ -1904,7 +1904,7 @@ static int _form_mirror(struct cmd_context *cmd, struct alloc_handle *ah,
}
if (!_create_mimage_lvs(ah, mirrors, stripes, stripe_size, lv, img_lvs, log))
- return 0;
+ return_0;
if (!lv_add_mirror_lvs(lv, img_lvs, mirrors,
MIRROR_IMAGE | (lv->status & LOCKED),
9 years
master - debug: show sys errors
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=eadebc3b615c8d...
Commit: eadebc3b615c8dec8f99f5e411b01c97b791987b
Parent: ed2a08bf25e3b4e6a88c55402ab5dc11061ad68e
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 7 11:38:43 2015 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri May 8 15:15:10 2015 +0200
debug: show sys errors
---
libdm/libdm-file.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/libdm/libdm-file.c b/libdm/libdm-file.c
index 26c8241..52f9d45 100644
--- a/libdm/libdm-file.c
+++ b/libdm/libdm-file.c
@@ -199,10 +199,10 @@ retry_fcntl:
fail_close_unlink:
if (unlink(lockfile))
- stack;
+ log_sys_debug("unlink", lockfile);
fail_close:
if (close(fd))
- stack;
+ log_sys_debug("close", lockfile);
return 0;
}
9 years
master - cleanup: use 64bit ulongs
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=ed2a08bf25e3b4...
Commit: ed2a08bf25e3b4e6a88c55402ab5dc11061ad68e
Parent: 5232fd13f362334286ca2076db99a0063919341c
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 7 11:17:36 2015 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri May 8 15:15:10 2015 +0200
cleanup: use 64bit ulongs
Use 64bit arithmetics for all numbers (Coverity).
---
lib/metadata/mirror.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/metadata/mirror.c b/lib/metadata/mirror.c
index 028de84..a0418ce 100644
--- a/lib/metadata/mirror.c
+++ b/lib/metadata/mirror.c
@@ -164,7 +164,7 @@ uint32_t adjusted_mirror_region_size(uint32_t extent_size, uint32_t extents,
uint64_t region_max;
uint64_t region_min, region_min_pow2;
- region_max = (1 << (ffs((int)extents) - 1)) * (uint64_t) (1 << (ffs((int)extent_size) - 1));
+ region_max = (1UL << (ffs((int)extents) - 1)) * (1UL << (ffs((int)extent_size) - 1));
if (region_max < UINT32_MAX && region_size > region_max) {
region_size = (uint32_t) region_max;
9 years
master - cleanup: cast minor to dev_t
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=5232fd13f36233...
Commit: 5232fd13f362334286ca2076db99a0063919341c
Parent: b8dfd7a53d6ef203ca6204d00f7c26c0baea99f6
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 7 11:03:48 2015 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri May 8 15:15:10 2015 +0200
cleanup: cast minor to dev_t
Let the arithmetic run with a single dev_t type (Coverity).
---
lib/device/dev-type.c | 4 ++--
libdm/ioctl/libdm-iface.c | 6 +++---
libdm/libdm-common.c | 2 +-
libdm/libdm-deptree.c | 4 ++--
tools/pvscan.c | 4 ++--
5 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/lib/device/dev-type.c b/lib/device/dev-type.c
index 5a4c658..82e37e0 100644
--- a/lib/device/dev-type.c
+++ b/lib/device/dev-type.c
@@ -433,7 +433,7 @@ int dev_get_primary_dev(struct dev_types *dt, struct device *dev, dev_t *result)
*/
if ((parts = dt->dev_type_array[major].max_partitions) > 1) {
if ((residue = minor % parts)) {
- *result = MKDEV((dev_t)major, (minor - residue));
+ *result = MKDEV((dev_t)major, (dev_t)(minor - residue));
ret = 2;
} else {
*result = dev->dev;
@@ -510,7 +510,7 @@ int dev_get_primary_dev(struct dev_types *dt, struct device *dev, dev_t *result)
path, buffer);
goto out;
}
- *result = MKDEV((dev_t)major, minor);
+ *result = MKDEV((dev_t)major, (dev_t)minor);
ret = 2;
out:
if (fp && fclose(fp))
diff --git a/libdm/ioctl/libdm-iface.c b/libdm/ioctl/libdm-iface.c
index 1f301f9..298723e 100644
--- a/libdm/ioctl/libdm-iface.c
+++ b/libdm/ioctl/libdm-iface.c
@@ -245,7 +245,7 @@ static int _control_exists(const char *control, uint32_t major, uint32_t minor)
return -1;
}
- if (major && buf.st_rdev != MKDEV((dev_t)major, minor)) {
+ if (major && buf.st_rdev != MKDEV((dev_t)major, (dev_t)minor)) {
log_verbose("%s: Wrong device number: (%u, %u) instead of "
"(%u, %u)", control,
MAJOR(buf.st_mode), MINOR(buf.st_mode),
@@ -288,7 +288,7 @@ static int _create_control(const char *control, uint32_t major, uint32_t minor)
(void) dm_prepare_selinux_context(control, S_IFCHR);
old_umask = umask(DM_CONTROL_NODE_UMASK);
if (mknod(control, S_IFCHR | S_IRUSR | S_IWUSR,
- MKDEV((dev_t)major, minor)) < 0) {
+ MKDEV((dev_t)major, (dev_t)minor)) < 0) {
log_sys_error("mknod", control);
(void) dm_prepare_selinux_context(NULL, 0);
return 0;
@@ -1142,7 +1142,7 @@ static struct dm_ioctl *_flatten(struct dm_task *dmt, unsigned repeat_count)
}
dmi->flags |= DM_PERSISTENT_DEV_FLAG;
- dmi->dev = MKDEV((dev_t)dmt->major, dmt->minor);
+ dmi->dev = MKDEV((dev_t)dmt->major, (dev_t)dmt->minor);
}
/* Does driver support device number referencing? */
diff --git a/libdm/libdm-common.c b/libdm/libdm-common.c
index bd51645..fa533f8 100644
--- a/libdm/libdm-common.c
+++ b/libdm/libdm-common.c
@@ -959,7 +959,7 @@ static int _add_dev_node(const char *dev_name, uint32_t major, uint32_t minor,
{
char path[PATH_MAX];
struct stat info;
- dev_t dev = MKDEV((dev_t)major, minor);
+ dev_t dev = MKDEV((dev_t)major, (dev_t)minor);
mode_t old_mask;
if (!_build_dev_path(path, sizeof(path), dev_name))
diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c
index cd63061..578f645 100644
--- a/libdm/libdm-deptree.c
+++ b/libdm/libdm-deptree.c
@@ -511,7 +511,7 @@ static struct dm_tree_node *_create_dm_tree_node(struct dm_tree *dtree,
dm_list_init(&node->activated);
dm_list_init(&node->props.segs);
- dev = MKDEV((dev_t)info->major, info->minor);
+ dev = MKDEV((dev_t)info->major, (dev_t)info->minor);
if (!dm_hash_insert_binary(dtree->devs, (const char *) &dev,
sizeof(dev), node)) {
@@ -535,7 +535,7 @@ static struct dm_tree_node *_create_dm_tree_node(struct dm_tree *dtree,
static struct dm_tree_node *_find_dm_tree_node(struct dm_tree *dtree,
uint32_t major, uint32_t minor)
{
- dev_t dev = MKDEV((dev_t)major, minor);
+ dev_t dev = MKDEV((dev_t)major, (dev_t)minor);
return dm_hash_lookup_binary(dtree->devs, (const char *) &dev,
sizeof(dev));
diff --git a/tools/pvscan.c b/tools/pvscan.c
index 307187d..2c997b7 100644
--- a/tools/pvscan.c
+++ b/tools/pvscan.c
@@ -262,7 +262,7 @@ static int _pvscan_lvmetad(struct cmd_context *cmd, int argc, char **argv)
ret = ECMD_FAILED;
continue;
}
- devno = MKDEV((dev_t)major, minor);
+ devno = MKDEV((dev_t)major, (dev_t)minor);
if (!(dev = dev_cache_get_by_devt(devno, cmd->lvmetad_filter))) {
if (!(_clear_dev_from_lvmetad_cache(devno, major, minor, handler))) {
stack;
@@ -295,7 +295,7 @@ static int _pvscan_lvmetad(struct cmd_context *cmd, int argc, char **argv)
if (major < 0 || minor < 0)
continue;
- devno = MKDEV((dev_t)major, minor);
+ devno = MKDEV((dev_t)major, (dev_t)minor);
if (!(dev = dev_cache_get_by_devt(devno, cmd->lvmetad_filter))) {
if (!(_clear_dev_from_lvmetad_cache(devno, major, minor, handler))) {
9 years
master - cleanup: indent mismatch
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=b8dfd7a53d6ef2...
Commit: b8dfd7a53d6ef203ca6204d00f7c26c0baea99f6
Parent: 28f18404a7a2fe64f3c7918d8d543f913515651b
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 7 11:00:23 2015 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri May 8 15:15:10 2015 +0200
cleanup: indent mismatch
Aling break (Coverity).
---
libdm/libdm-report.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/libdm/libdm-report.c b/libdm/libdm-report.c
index 2fe9300..def72fe 100644
--- a/libdm/libdm-report.c
+++ b/libdm/libdm-report.c
@@ -1270,7 +1270,7 @@ static int _do_check_value_is_reserved(unsigned type, const void *reserved_value
if ((*(uint64_t *)value1 == *(uint64_t *) reserved_value) ||
(value2 && (*(uint64_t *)value2 == *(uint64_t *) reserved_value)))
return 1;
- break;
+ break;
case DM_REPORT_FIELD_TYPE_STRING:
if ((!strcmp((const char *)value1, (const char *) reserved_value)) ||
(value2 && (!strcmp((const char *)value2, (const char *) reserved_value))))
9 years
master - cleanup: drop unneeded header file
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=28f18404a7a2fe...
Commit: 28f18404a7a2fe64f3c7918d8d543f913515651b
Parent: 3c46428fcde05c3126ac2a505580cadb792f8997
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 7 10:58:35 2015 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri May 8 15:15:10 2015 +0200
cleanup: drop unneeded header file
Does not resolves any symbols (Coverity).
---
lib/misc/lvm-file.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/lib/misc/lvm-file.c b/lib/misc/lvm-file.c
index 2e896ec..6fc31cd 100644
--- a/lib/misc/lvm-file.c
+++ b/lib/misc/lvm-file.c
@@ -21,7 +21,6 @@
#include <sys/file.h>
#include <fcntl.h>
#include <dirent.h>
-#include <sys/time.h>
/*
* Creates a temporary filename, and opens a descriptor to the
9 years
master - cleanup: drop unneeded int test
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=3c46428fcde05c...
Commit: 3c46428fcde05c3126ac2a505580cadb792f8997
Parent: 950a21d58adc581f921847f5c356a45f4f9cce94
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 7 10:54:55 2015 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri May 8 15:15:10 2015 +0200
cleanup: drop unneeded int test
Testing int region_size > INT32_MAX is always false
so drop the test (Coverity).
---
lib/metadata/lv_manip.c | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)
diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index 85f727f..1251a5d 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -774,9 +774,6 @@ int get_default_region_size(struct cmd_context *cmd)
{
int region_size = _get_default_region_size(cmd);
- if (region_size > INT32_MAX)
- region_size = INT32_MAX;
-
if (region_size & (region_size - 1)) {
region_size = _round_down_pow2(region_size);
log_verbose("Reducing mirror region size to %u kiB (power of 2).",
9 years
master - format1: check for lvm1_system_id
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=950a21d58adc58...
Commit: 950a21d58adc581f921847f5c356a45f4f9cce94
Parent: 05934d2538b76134fe4a5f4ddd7954ff32620b50
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu May 7 13:09:43 2015 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri May 8 15:15:10 2015 +0200
format1: check for lvm1_system_id
As in the code above in this function continue to check for
lvm1_system_id pointer existance before dereferencing it
(Coverity).
---
lib/format1/import-export.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/format1/import-export.c b/lib/format1/import-export.c
index 9b387e2..72f6946 100644
--- a/lib/format1/import-export.c
+++ b/lib/format1/import-export.c
@@ -180,7 +180,7 @@ int export_pv(struct cmd_context *cmd, struct dm_pool *mem __attribute__((unused
}
/* Is VG being imported? */
- if (vg && !vg_is_exported(vg) && *vg->lvm1_system_id &&
+ if (vg && !vg_is_exported(vg) && vg->lvm1_system_id && *vg->lvm1_system_id &&
!strncmp(vg->lvm1_system_id, EXPORTED_TAG, sizeof(EXPORTED_TAG) - 1)) {
if (!generate_lvm1_system_id(cmd, (char *)pvd->system_id, IMPORTED_TAG))
return_0;
@@ -192,7 +192,7 @@ int export_pv(struct cmd_context *cmd, struct dm_pool *mem __attribute__((unused
return_0;
/* Update internal system_id if we changed it */
- if (vg &&
+ if (vg && vg->lvm1_system_id &&
(!*vg->lvm1_system_id ||
strncmp(vg->lvm1_system_id, (char *)pvd->system_id, sizeof(pvd->system_id))))
strncpy(vg->lvm1_system_id, (char *)pvd->system_id, NAME_LEN);
9 years