master - tests: proper wait usage
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=9e33781d95f2fe...
Commit: 9e33781d95f2fe7d412b97eb48cb8dddd1c07c61
Parent: 43662fa081ccced622711aecfa21ef8d158a3dc3
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Thu Sep 29 13:18:18 2016 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 3 17:49:56 2016 +0200
tests: proper wait usage
Fix missing wait so we have paired waiting.
Also 'wait' for precise PID to get 'exit' code.
Test for 'error' replacing only with newer snapshot targets.
The old one will wait for resume.
Note: 'wait -n' is not always available so can't be used..
---
test/shell/snapshot-remove-dmsetup.sh | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/test/shell/snapshot-remove-dmsetup.sh b/test/shell/snapshot-remove-dmsetup.sh
index 609df05..05bf720 100644
--- a/test/shell/snapshot-remove-dmsetup.sh
+++ b/test/shell/snapshot-remove-dmsetup.sh
@@ -42,6 +42,7 @@ dmsetup suspend $vg-$lv1
# now this should pass without blocking
dmsetup suspend --noflush --nolockfs $vg1-snap &
+DMPID=$!
#dmsetup suspend $vg1-snap &
sleep .5
@@ -55,20 +56,28 @@ dmsetup resume $vg-$lv1
# otherwise --noudevsync would be needed
dmsetup resume $vg1-snap
+# Expecting success from 'dmsetup'
+wait $DMPID
+
# Try how force removal works
dmsetup suspend $vg-$lv1
# needs to fail as device is still open
not dmsetup remove --force $vg1-snap &
+DMPID=$!
+# on older snapshot target 'remove' will wait till $lv1 is resumed
+if aux target_at_least dm-snapshot 1 6 0 ; then
sleep .5
dmsetup table $vg1-snap | tee out
should grep -i error out
+fi
dmsetup resume $vg-$lv1
-wait
+# Expecting success from 'not dmsetup'
+wait $DMPID
# check it really is now 'error' target
dmsetup table $vg1-snap | tee out
7 years, 6 months
master - cleanup :drop unneeded header file
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=43662fa081ccce...
Commit: 43662fa081ccced622711aecfa21ef8d158a3dc3
Parent: 77ffd39dfb4145e444fb9ab2394d807207db8083
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 3 14:49:06 2016 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 3 17:49:56 2016 +0200
cleanup :drop unneeded header file
Not needed (Coverity).
---
lib/uuid/uuid.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/lib/uuid/uuid.c b/lib/uuid/uuid.c
index aa44dc4..1833f2c 100644
--- a/lib/uuid/uuid.c
+++ b/lib/uuid/uuid.c
@@ -19,7 +19,6 @@
#include <assert.h>
#include <sys/stat.h>
-#include <fcntl.h>
#include <unistd.h>
#include <ctype.h>
7 years, 6 months
master - cleanup: drop test for NULL
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=77ffd39dfb4145...
Commit: 77ffd39dfb4145e444fb9ab2394d807207db8083
Parent: 9fe4f2337bfaaa30e647ed1d20be7fb76d598559
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 3 14:37:08 2016 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 3 17:49:56 2016 +0200
cleanup: drop test for NULL
Since lp->segtype has been already checked for not-being NULL,
drop this test so Coverity is not later confused it 'can be a NULL'.
---
tools/lvconvert.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 3607247..2f38c9d 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -4460,7 +4460,8 @@ static int _lvconvert(struct cmd_context *cmd, struct logical_volume *lv,
}
}
- if (activation() && lp->segtype && lp->segtype->ops->target_present &&
+ /* lv->segtype can't be NULL */
+ if (activation() && lp->segtype->ops->target_present &&
!lp->segtype->ops->target_present(cmd, NULL, &lp->target_attr)) {
log_error("%s: Required device-mapper target(s) not "
"detected in your kernel.", lp->segtype->name);
7 years, 6 months
master - cleanup: drop assign before use
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=9fe4f2337bfaaa...
Commit: 9fe4f2337bfaaa30e647ed1d20be7fb76d598559
Parent: cea441f4d1e19f170d9161203ef843c59f3fbf70
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 3 13:04:16 2016 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 3 17:49:55 2016 +0200
cleanup: drop assign before use
Drop unneeded assigns singe vars are set later in code before
their first use (Coverity).
---
daemons/lvmetad/lvmetad-core.c | 2 +-
lib/cache/lvmcache.c | 2 +-
lib/metadata/raid_manip.c | 2 +-
lib/metadata/thin_manip.c | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/daemons/lvmetad/lvmetad-core.c b/daemons/lvmetad/lvmetad-core.c
index 36a5cec..ee0c52f 100644
--- a/daemons/lvmetad/lvmetad-core.c
+++ b/daemons/lvmetad/lvmetad-core.c
@@ -1249,8 +1249,8 @@ static int _update_metadata(lvmetad_state *s, const char *arg_name, const char *
const char *old_vgid = NULL;
const char *new_vgid = NULL;
const char *new_metadata_vgid;
+ int new_seq;
int old_seq = -1;
- int new_seq = -1;
int needs_repair = 0;
int abort_daemon = 0;
int retval = 0;
diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c
index 5e402f0..a15481f 100644
--- a/lib/cache/lvmcache.c
+++ b/lib/cache/lvmcache.c
@@ -858,7 +858,7 @@ static void _choose_preferred_devs(struct cmd_context *cmd,
struct dm_list *add_cache_devs)
{
char uuid[64] __attribute__((aligned(8)));
- const char *reason = "none";
+ const char *reason;
struct dm_list altdevs;
struct dm_list new_unused;
struct dev_types *dt = cmd->dev_types;
diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c
index f8a3c46..e87a4e5 100644
--- a/lib/metadata/raid_manip.c
+++ b/lib/metadata/raid_manip.c
@@ -956,7 +956,7 @@ static int _raid_add_images(struct logical_volume *lv,
int commit, int use_existing_area_len)
{
int rebuild_flag_cleared = 0;
- struct lv_segment *seg = first_seg(lv);
+ struct lv_segment *seg;
uint32_t s;
if (!_raid_add_images_without_commit(lv, new_count, pvs, use_existing_area_len))
diff --git a/lib/metadata/thin_manip.c b/lib/metadata/thin_manip.c
index a02a7e6..e7a2c33 100644
--- a/lib/metadata/thin_manip.c
+++ b/lib/metadata/thin_manip.c
@@ -472,7 +472,7 @@ static int _check_pool_create(const struct logical_volume *lv)
int update_pool_lv(struct logical_volume *lv, int activate)
{
- int monitored = DMEVENTD_MONITOR_IGNORE;
+ int monitored;
int ret = 1;
if (!lv_is_thin_pool(lv)) {
7 years, 6 months
master - cleanup: simplier assign of cmd vars
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=cea441f4d1e19f...
Commit: cea441f4d1e19f170d9161203ef843c59f3fbf70
Parent: 00f883a4aa10079bac21c294ce5ed34f11af8ac7
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 3 13:00:50 2016 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 3 17:49:55 2016 +0200
cleanup: simplier assign of cmd vars
Directly assign queried args as they provide matching values for
a setting.
---
tools/lvmcmdline.c | 8 ++------
1 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c
index 9a4deb7..bd29e25 100644
--- a/tools/lvmcmdline.c
+++ b/tools/lvmcmdline.c
@@ -1049,23 +1049,19 @@ static int _get_settings(struct cmd_context *cmd)
const char *activation_mode;
cmd->current_settings = cmd->default_settings;
+ cmd->current_settings.verbose = arg_count(cmd, verbose_ARG);
+ cmd->current_settings.test = arg_is_set(cmd, test_ARG);
if (arg_is_set(cmd, debug_ARG))
cmd->current_settings.debug = _LOG_FATAL +
(arg_count(cmd, debug_ARG) - 1);
- if (arg_is_set(cmd, verbose_ARG))
- cmd->current_settings.verbose = arg_count(cmd, verbose_ARG);
-
if (arg_is_set(cmd, quiet_ARG)) {
cmd->current_settings.debug = 0;
cmd->current_settings.verbose = 0;
cmd->current_settings.silent = (arg_count(cmd, quiet_ARG) > 1) ? 1 : 0;
}
- if (arg_is_set(cmd, test_ARG))
- cmd->current_settings.test = arg_is_set(cmd, test_ARG);
-
if (arg_is_set(cmd, driverloaded_ARG)) {
cmd->current_settings.activation =
arg_int_value(cmd, driverloaded_ARG,
7 years, 6 months
master - dmeventd: pthread_sigmask in single function
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=00f883a4aa1007...
Commit: 00f883a4aa10079bac21c294ce5ed34f11af8ac7
Parent: d70f1127624fa64ee691eb4c9d4bce5a4845f985
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 3 15:39:54 2016 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 3 17:47:28 2016 +0200
dmeventd: pthread_sigmask in single function
Integrate back _unblock_sigalrm() and check for error code of
pthread_sigmask() function so we do not use uninitialized
sigmask_t on error path (Coverity).
---
WHATS_NEW_DM | 1 +
daemons/dmeventd/dmeventd.c | 25 ++++++++++---------------
2 files changed, 11 insertions(+), 15 deletions(-)
diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM
index 4303dc9..c69eb27 100644
--- a/WHATS_NEW_DM
+++ b/WHATS_NEW_DM
@@ -1,5 +1,6 @@
Version 1.02.136 -
======================================
+ Check and report pthread_sigmask() failure in dmeventd.
Check mem alloc fail in _canonicalize_field_ids().
Use unsigned math when checking more then 31 legs of raid.
Fix 'dmstats delete' with dmsetup older than v1.02.129
diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
index 25b34a7..6024e56 100644
--- a/daemons/dmeventd/dmeventd.c
+++ b/daemons/dmeventd/dmeventd.c
@@ -829,17 +829,6 @@ static void _print_sigset(const char *prefix, const sigset_t *sigset)
}
#endif
-static sigset_t _unblock_sigalrm(void)
-{
- sigset_t set, old;
-
- sigemptyset(&set);
- sigaddset(&set, SIGALRM);
- pthread_sigmask(SIG_UNBLOCK, &set, &old);
-
- return old;
-}
-
enum {
DM_WAIT_RETRY,
DM_WAIT_INTR,
@@ -849,7 +838,7 @@ enum {
/* Wait on a device until an event occurs. */
static int _event_wait(struct thread_status *thread)
{
- sigset_t set;
+ sigset_t set, old;
int ret = DM_WAIT_RETRY;
struct dm_info info;
@@ -859,7 +848,12 @@ static int _event_wait(struct thread_status *thread)
* This is so that you can break out of waiting on an event,
* either for a timeout event, or to cancel the thread.
*/
- set = _unblock_sigalrm();
+ sigemptyset(&set);
+ sigaddset(&set, SIGALRM);
+ if (pthread_sigmask(SIG_UNBLOCK, &set, &old) != 0) {
+ log_sys_error("pthread_sigmask", "unblock alarm");
+ return ret; /* What better */
+ }
if (dm_task_run(thread->wait_task)) {
thread->current_events |= DM_EVENT_DEVICE_ERROR;
@@ -883,10 +877,11 @@ static int _event_wait(struct thread_status *thread)
}
}
- pthread_sigmask(SIG_SETMASK, &set, NULL);
+ if (pthread_sigmask(SIG_SETMASK, &old, NULL) != 0)
+ log_sys_error("pthread_sigmask", "block alarm");
#ifdef DEBUG_SIGNALS
- _print_sigset("dmeventd blocking ", &set);
+ _print_sigset("dmeventd blocking ", &old);
#endif
DEBUGLOG("Completed waitevent task for %s.", thread->device.name);
7 years, 6 months
master - libdm: check for mem when _canonicalize_field_ids
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=d70f1127624fa6...
Commit: d70f1127624fa64ee691eb4c9d4bce5a4845f985
Parent: ee04f1fcfd915af927ad19c3952e211158f4df0d
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 3 16:29:55 2016 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 3 17:46:26 2016 +0200
libdm: check for mem when _canonicalize_field_ids
Add missing check for dm_pool_strdup() call (Coverity).
---
WHATS_NEW_DM | 1 +
libdm/libdm-report.c | 5 ++++-
2 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM
index 6186737..4303dc9 100644
--- a/WHATS_NEW_DM
+++ b/WHATS_NEW_DM
@@ -1,5 +1,6 @@
Version 1.02.136 -
======================================
+ Check mem alloc fail in _canonicalize_field_ids().
Use unsigned math when checking more then 31 legs of raid.
Fix 'dmstats delete' with dmsetup older than v1.02.129
Fix stats walk segfault with dmsetup older than v1.02.129
diff --git a/libdm/libdm-report.c b/libdm/libdm-report.c
index fed79d4..ebd2439 100644
--- a/libdm/libdm-report.c
+++ b/libdm/libdm-report.c
@@ -1228,7 +1228,10 @@ static int _canonicalize_field_ids(struct dm_report *rh)
return_0;
if (differs) {
- canonical_field_dup = dm_pool_strdup(rh->mem, canonical_field);
+ if (!(canonical_field_dup = dm_pool_strdup(rh->mem, canonical_field))) {
+ log_error("_canonicalize_field_dup: dm_pool_alloc failed.");
+ return 0;
+ }
rh->canonical_field_ids[i] = canonical_field_dup;
} else
rh->canonical_field_ids[i] = rh->fields[i].id;
7 years, 6 months
master - raid: dmeventd plugin use 64bit arithmetic
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=ee04f1fcfd915a...
Commit: ee04f1fcfd915af927ad19c3952e211158f4df0d
Parent: e95a2529748c3047f1af33678c74114d71994e05
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Oct 3 14:58:23 2016 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Mon Oct 3 17:44:25 2016 +0200
raid: dmeventd plugin use 64bit arithmetic
Coverity suggested to used 64bit unsigned ints instead of signed 32b int.
Assuming there is no user of >31legs raid array.
---
WHATS_NEW_DM | 1 +
daemons/dmeventd/plugins/raid/dmeventd_raid.c | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM
index ed07307..6186737 100644
--- a/WHATS_NEW_DM
+++ b/WHATS_NEW_DM
@@ -1,5 +1,6 @@
Version 1.02.136 -
======================================
+ Use unsigned math when checking more then 31 legs of raid.
Fix 'dmstats delete' with dmsetup older than v1.02.129
Fix stats walk segfault with dmsetup older than v1.02.129
diff --git a/daemons/dmeventd/plugins/raid/dmeventd_raid.c b/daemons/dmeventd/plugins/raid/dmeventd_raid.c
index bec594a..ee18793 100644
--- a/daemons/dmeventd/plugins/raid/dmeventd_raid.c
+++ b/daemons/dmeventd/plugins/raid/dmeventd_raid.c
@@ -48,11 +48,11 @@ static int _process_raid_event(struct dso_state *state, char *params, const char
while ((d = strchr(d, 'D'))) {
uint32_t dev = (uint32_t)(d - status->dev_health);
- if (!(state->raid_devs[dev / 64] & (1 << (dev % 64))))
+ if (!(state->raid_devs[dev / 64] & (UINT64_C(1) << (dev % 64))))
log_error("Device #%u of %s array, %s, has failed.",
dev, status->raid_type, device);
- state->raid_devs[dev / 64] |= (1 << (dev % 64));
+ state->raid_devs[dev / 64] |= (UINT64_C(1) << (dev % 64));
d++;
dead = 1;
}
7 years, 6 months
master - libdm: convert FIEMAP buffer allocation from stack to dm_zalloc
by Bryn Reeves
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=e95a2529748c30...
Commit: e95a2529748c3047f1af33678c74114d71994e05
Parent: 49a1c4d4b0f2c5fbc83a1ad4bfde59a366049b2a
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Mon Oct 3 14:42:30 2016 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Mon Oct 3 15:14:33 2016 +0100
libdm: convert FIEMAP buffer allocation from stack to dm_zalloc
---
libdm/libdm-stats.c | 27 +++++++++++++++++++++------
1 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c
index a033861..3cddae4 100644
--- a/libdm/libdm-stats.c
+++ b/libdm/libdm-stats.c
@@ -4195,9 +4195,9 @@ static int _stats_add_extent(struct dm_pool *mem, struct fiemap_extent *fm_ext,
static struct _extent *_stats_get_extents_for_file(struct dm_pool *mem, int fd,
uint64_t *count)
{
- uint64_t buf[STATS_FIE_BUF_LEN];
- struct fiemap *fiemap = (struct fiemap *)buf;
- struct fiemap_extent *fm_ext = &fiemap->fm_extents[0];
+ uint64_t *buf;
+ struct fiemap *fiemap = NULL;
+ struct fiemap_extent *fm_ext = NULL;
struct fiemap_extent fm_last = {0};
struct _extent *extents;
unsigned long long expected = 0;
@@ -4208,10 +4208,18 @@ static struct _extent *_stats_get_extents_for_file(struct dm_pool *mem, int fd,
int last = 0;
int rc;
- memset(buf, 0, sizeof(buf));
+ buf = dm_zalloc(STATS_FIE_BUF_LEN);
+ if (!buf) {
+ log_error("Could not allocate memory for FIEMAP buffer.");
+ return NULL;
+ }
+
+ /* initialise pointers into the ioctl buffer. */
+ fiemap = (struct fiemap *) buf;
+ fm_ext = &fiemap->fm_extents[0];
/* space available per ioctl */
- *count = (sizeof(buf) - sizeof(*fiemap))
+ *count = (STATS_FIE_BUF_LEN - sizeof(*fiemap))
/ sizeof(struct fiemap_extent);
/* grow temporary extent table in the pool */
@@ -4277,9 +4285,16 @@ static struct _extent *_stats_get_extents_for_file(struct dm_pool *mem, int fd,
/* return total number of extents */
*count = tot_extents;
- return dm_pool_end_object(mem);
+ extents = dm_pool_end_object(mem);
+
+ /* free FIEMAP buffer. */
+ dm_free(buf);
+
+ return extents;
+
bad:
dm_pool_abandon_object(mem);
+ dm_free(buf);
return NULL;
}
7 years, 6 months
master - libdm: free FIEMAP buffer before returning
by Bryn Reeves
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=e5aaedfd0eed81...
Commit: e5aaedfd0eed81bb6ef817dbe0e6a3937aa27ba6
Parent: ca00a4d4e1c9b9742918e478b1f71310001b91fa
Author: Bryn M. Reeves <bmr(a)redhat.com>
AuthorDate: Mon Oct 3 14:54:17 2016 +0100
Committer: Bryn M. Reeves <bmr(a)redhat.com>
CommitterDate: Mon Oct 3 14:54:17 2016 +0100
libdm: free FIEMAP buffer before returning
---
libdm/libdm-stats.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c
index dc30051..77e94a1 100644
--- a/libdm/libdm-stats.c
+++ b/libdm/libdm-stats.c
@@ -4286,7 +4286,13 @@ static struct _extent *_stats_get_extents_for_file(struct dm_pool *mem, int fd,
/* return total number of extents */
*count = tot_extents;
- return dm_pool_end_object(mem);
+
+ /* end the extents table before freeing the FIEMAP buffer */
+ extents = dm_pool_end_object(mem);
+
+ dm_pool_free(mem, buf);
+ return extents;
+
bad:
dm_pool_abandon_object(mem);
dm_pool_free(mem, buf);
7 years, 6 months