master - tests: relocate vgimport test
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=db04d3e6d29dde...
Commit: db04d3e6d29dde331a88eec2cec5249ee7c211f0
Parent: 13258d6e96a43fa88b41e21befd31836f21b59dd
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 24 09:58:29 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Mar 25 11:22:59 2014 +0100
tests: relocate vgimport test
It seem like a better-fit here.
---
test/shell/covercmd.sh | 7 -------
test/shell/vgimportclone.sh | 6 ++++++
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/test/shell/covercmd.sh b/test/shell/covercmd.sh
index ffa48f0..f1bdca9 100644
--- a/test/shell/covercmd.sh
+++ b/test/shell/covercmd.sh
@@ -64,13 +64,6 @@ for i in h b s k m g t p e H B S K M G T P E; do
done
fi
-
-# test vgexport vgimport tools
-vgchange -an $vg
-vgexport $vg
-vgimport $vg
-vgchange -ay $vg
-
# "-persistent y --major 254 --minor 20"
# "-persistent n"
# test various lvm utils
diff --git a/test/shell/vgimportclone.sh b/test/shell/vgimportclone.sh
index f2977c9..923638e 100644
--- a/test/shell/vgimportclone.sh
+++ b/test/shell/vgimportclone.sh
@@ -16,6 +16,12 @@ aux prepare_devs 2
vgcreate --metadatasize 128k $vg1 "$dev1"
lvcreate -l100%FREE -n $lv1 $vg1
+# Test plain vgexport vgimport tools
+vgchange -an $vg1
+vgexport $vg1
+vgimport $vg1
+vgchange -ay $vg1
+
# Clone the LUN
dd if="$dev1" of="$dev2" bs=256K count=1
aux notify_lvmetad "$dev2"
9 years, 2 months
master - debug: add proper backtrace debug
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=13258d6e96a43f...
Commit: 13258d6e96a43fa88b41e21befd31836f21b59dd
Parent: 89575d68957dacdcad7d106e3ffd71ff96d3144f
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 24 20:31:14 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Mar 25 11:22:59 2014 +0100
debug: add proper backtrace debug
When failure happens inside refresh, print proper debug backtrace.
---
lib/commands/toolcontext.c | 24 ++++++++++++------------
1 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
index 0c59ea0..c76f281 100644
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
@@ -1619,7 +1619,7 @@ int refresh_toolcontext(struct cmd_context *cmd)
cmd->lib_dir = NULL;
if (!_init_lvm_conf(cmd))
- return 0;
+ return_0;
/* Temporary duplicate cft pointer holding lvm.conf - replaced later */
cft_tmp = cmd->cft;
@@ -1631,45 +1631,45 @@ int refresh_toolcontext(struct cmd_context *cmd)
/* Init tags from lvm.conf. */
if (!_init_tags(cmd, cft_tmp))
- return 0;
+ return_0;
/* Doesn't change cmd->cft */
if (!_init_tag_configs(cmd))
- return 0;
+ return_0;
/* Merge all the tag config files with lvm.conf, returning a
* fresh cft pointer in place of cft_tmp. */
if (!(cmd->cft = _merge_config_files(cmd, cft_tmp)))
- return 0;
+ return_0;
/* Finally we can make the proper, fully-merged, cmd->cft */
if (cft_cmdline)
cmd->cft = dm_config_insert_cascaded_tree(cft_cmdline, cmd->cft);
if (!_process_config(cmd))
- return 0;
+ return_0;
if (!(cmd->dev_types = create_dev_types(cmd->proc_dir,
find_config_tree_node(cmd, devices_types_CFG, NULL))))
- return 0;
+ return_0;
if (!_init_dev_cache(cmd))
- return 0;
+ return_0;
if (!_init_filters(cmd, 0))
- return 0;
+ return_0;
if (!_init_formats(cmd))
- return 0;
+ return_0;
if (!init_lvmcache_orphans(cmd))
- return 0;
+ return_0;
if (!_init_segtypes(cmd))
- return 0;
+ return_0;
if (!_init_backup(cmd))
- return 0;
+ return_0;
cmd->config_initialized = 1;
9 years, 2 months
master - cleanup: drop init of already zalloced mem
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=89575d68957dac...
Commit: 89575d68957dacdcad7d106e3ffd71ff96d3144f
Parent: 406ec4162f86d872e041d7aa524d1f7dfd0d1cc0
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 24 09:22:59 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Mar 25 11:22:59 2014 +0100
cleanup: drop init of already zalloced mem
---
lib/format_text/format-text.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/lib/format_text/format-text.c b/lib/format_text/format-text.c
index a652590..c987cd6 100644
--- a/lib/format_text/format-text.c
+++ b/lib/format_text/format-text.c
@@ -1865,7 +1865,6 @@ static int _create_vg_text_instance(struct format_instance *fid,
return 0;
}
- fidtc->raw_metadata_buf = NULL;
fid->private = (void *) fidtc;
if (type & FMT_INSTANCE_PRIVATE_MDAS) {
9 years, 2 months
master - cleanup: use dm_free without extra test
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=406ec4162f86d8...
Commit: 406ec4162f86d872e041d7aa524d1f7dfd0d1cc0
Parent: 4a6f05e42085c0d3e8bc4b5352b57ab9b4434e02
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 24 09:20:18 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Mar 25 11:22:59 2014 +0100
cleanup: use dm_free without extra test
It's ok to free(NULL).
---
daemons/dmeventd/libdevmapper-event.c | 8 ++++----
lib/cache/lvmetad.c | 3 +--
lib/format_text/format-text.c | 13 +++++--------
tools/pvscan.c | 6 ++----
4 files changed, 12 insertions(+), 18 deletions(-)
diff --git a/daemons/dmeventd/libdevmapper-event.c b/daemons/dmeventd/libdevmapper-event.c
index 80d4420..b6e2f0d 100644
--- a/daemons/dmeventd/libdevmapper-event.c
+++ b/daemons/dmeventd/libdevmapper-event.c
@@ -700,8 +700,7 @@ static int _parse_message(struct dm_event_daemon_message *msg, char **dso_name,
return 0;
}
- if (id)
- dm_free(id);
+ dm_free(id);
return -ENOMEM;
}
@@ -863,12 +862,13 @@ int dm_event_get_timeout(const char *device_path, uint32_t *timeout)
if (!p) {
log_error("malformed reply from dmeventd '%s'\n",
msg.data);
+ dm_free(msg.data);
return -EIO;
}
*timeout = atoi(p);
}
- if (msg.data)
- dm_free(msg.data);
+ dm_free(msg.data);
+
return ret;
}
#endif
diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c
index cc51258..040a790 100644
--- a/lib/cache/lvmetad.c
+++ b/lib/cache/lvmetad.c
@@ -114,8 +114,7 @@ void lvmetad_set_token(const struct dm_config_value *filter)
{
int ft = 0;
- if (_lvmetad_token)
- dm_free(_lvmetad_token);
+ dm_free(_lvmetad_token);
while (filter && filter->type == DM_CFG_STRING) {
ft = calc_crc(ft, (const uint8_t *) filter->v.str, strlen(filter->v.str));
diff --git a/lib/format_text/format-text.c b/lib/format_text/format-text.c
index 29df5f1..a652590 100644
--- a/lib/format_text/format-text.c
+++ b/lib/format_text/format-text.c
@@ -677,10 +677,8 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
if (!dev_close(mdac->area.dev))
stack;
- if (fidtc->raw_metadata_buf) {
- dm_free(fidtc->raw_metadata_buf);
- fidtc->raw_metadata_buf = NULL;
- }
+ dm_free(fidtc->raw_metadata_buf);
+ fidtc->raw_metadata_buf = NULL;
}
return r;
@@ -766,10 +764,9 @@ static int _vg_commit_raw_rlocn(struct format_instance *fid,
if (!precommit) {
if (!dev_close(mdac->area.dev))
stack;
- if (fidtc->raw_metadata_buf) {
- dm_free(fidtc->raw_metadata_buf);
- fidtc->raw_metadata_buf = NULL;
- }
+
+ dm_free(fidtc->raw_metadata_buf);
+ fidtc->raw_metadata_buf = NULL;
}
return r;
diff --git a/tools/pvscan.c b/tools/pvscan.c
index 9e5536e..724ae5f 100644
--- a/tools/pvscan.c
+++ b/tools/pvscan.c
@@ -169,15 +169,13 @@ static int _clear_dev_from_lvmetad_cache(dev_t devno, int32_t major, int32_t min
if (!dm_asprintf(&buf, "%" PRIi32 ":%" PRIi32, major, minor))
stack;
if (!lvmetad_pv_gone(devno, buf ? : "", handler)) {
- if (buf)
- dm_free(buf);
+ dm_free(buf);
return 0;
}
log_print_unless_silent("Device %s not found. "
"Cleared from lvmetad cache.", buf ? : "");
- if (buf)
- dm_free(buf);
+ dm_free(buf);
return 1;
}
9 years, 2 months
master - cleanup: use trigraph
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=4a6f05e42085c0...
Commit: 4a6f05e42085c0d3e8bc4b5352b57ab9b4434e02
Parent: db71739f429f9bd12c93c6686292399f007ce4a9
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 24 10:01:44 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Mar 25 11:22:58 2014 +0100
cleanup: use trigraph
---
lib/activate/activate.c | 5 +----
1 files changed, 1 insertions(+), 4 deletions(-)
diff --git a/lib/activate/activate.c b/lib/activate/activate.c
index 9d404e5..ff13fe4 100644
--- a/lib/activate/activate.c
+++ b/lib/activate/activate.c
@@ -45,10 +45,7 @@ int lvm1_present(struct cmd_context *cmd)
return 0;
}
- if (path_exists(path))
- return 1;
- else
- return 0;
+ return (path_exists(path)) ? 1 : 0;
}
int list_segment_modules(struct dm_pool *mem, const struct lv_segment *seg,
9 years, 2 months
master - cleanup: initilization of vars
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=db71739f429f9b...
Commit: db71739f429f9bd12c93c6686292399f007ce4a9
Parent: 5c9165705a3303d6ac98c828420566e01c2d128e
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 24 09:19:56 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Mar 25 11:22:58 2014 +0100
cleanup: initilization of vars
---
daemons/dmeventd/libdevmapper-event.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/daemons/dmeventd/libdevmapper-event.c b/daemons/dmeventd/libdevmapper-event.c
index 8775449..80d4420 100644
--- a/daemons/dmeventd/libdevmapper-event.c
+++ b/daemons/dmeventd/libdevmapper-event.c
@@ -688,7 +688,7 @@ static char *_fetch_string(char **src, const int delimiter)
static int _parse_message(struct dm_event_daemon_message *msg, char **dso_name,
char **uuid, enum dm_event_mask *evmask)
{
- char *id = NULL;
+ char *id;
char *p = msg->data;
if ((id = _fetch_string(&p, ' ')) &&
@@ -841,7 +841,7 @@ static char *_skip_string(char *src, const int delimiter)
int dm_event_set_timeout(const char *device_path, uint32_t timeout)
{
- struct dm_event_daemon_message msg = { 0, 0, NULL };
+ struct dm_event_daemon_message msg = { 0 };
if (!device_exists(device_path))
return -ENODEV;
@@ -853,7 +853,7 @@ int dm_event_set_timeout(const char *device_path, uint32_t timeout)
int dm_event_get_timeout(const char *device_path, uint32_t *timeout)
{
int ret;
- struct dm_event_daemon_message msg = { 0, 0, NULL };
+ struct dm_event_daemon_message msg = { 0 };
if (!device_exists(device_path))
return -ENODEV;
9 years, 2 months
master - cleanup: indent
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=5c9165705a3303...
Commit: 5c9165705a3303d6ac98c828420566e01c2d128e
Parent: c7b2c08a6b30422cfa95da0348876f54b6f4cf6f
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 24 09:19:37 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Mar 25 11:22:58 2014 +0100
cleanup: indent
---
daemons/dmeventd/libdevmapper-event.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/daemons/dmeventd/libdevmapper-event.c b/daemons/dmeventd/libdevmapper-event.c
index 1e723d7..8775449 100644
--- a/daemons/dmeventd/libdevmapper-event.c
+++ b/daemons/dmeventd/libdevmapper-event.c
@@ -553,8 +553,8 @@ static struct dm_task *_get_device_info(const struct dm_event_handler *dmevh)
if (!info.exists) {
log_error("_get_device_info: %s%s%s%.0d%s%.0d%s%s: device not found",
- dmevh->uuid ? : "",
- (!dmevh->uuid && dmevh->dev_name) ? dmevh->dev_name : "",
+ dmevh->uuid ? : "",
+ (!dmevh->uuid && dmevh->dev_name) ? dmevh->dev_name : "",
(!dmevh->uuid && !dmevh->dev_name && dmevh->major > 0) ? "(" : "",
(!dmevh->uuid && !dmevh->dev_name && dmevh->major > 0) ? dmevh->major : 0,
(!dmevh->uuid && !dmevh->dev_name && dmevh->major > 0) ? ":" : "",
@@ -564,7 +564,6 @@ static struct dm_task *_get_device_info(const struct dm_event_handler *dmevh)
goto bad;
}
-
return dmt;
bad:
9 years, 2 months
master - cleanup: use NULL for pointer reset
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=c7b2c08a6b3042...
Commit: c7b2c08a6b30422cfa95da0348876f54b6f4cf6f
Parent: b714c7ebc618872abca1c6c7764c84c50b7fbcbe
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Mar 24 09:18:53 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Mar 25 11:22:58 2014 +0100
cleanup: use NULL for pointer reset
---
daemons/dmeventd/libdevmapper-event.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/daemons/dmeventd/libdevmapper-event.c b/daemons/dmeventd/libdevmapper-event.c
index db9200f..1e723d7 100644
--- a/daemons/dmeventd/libdevmapper-event.c
+++ b/daemons/dmeventd/libdevmapper-event.c
@@ -372,14 +372,13 @@ int daemon_talk(struct dm_event_fifos *fifos,
if (!_daemon_write(fifos, msg)) {
stack;
dm_free(msg->data);
- msg->data = 0;
+ msg->data = NULL;
return -EIO;
}
do {
-
dm_free(msg->data);
- msg->data = 0;
+ msg->data = NULL;
if (!_daemon_read(fifos, msg)) {
stack;
9 years, 2 months
master - clvmd: validate open device state
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=b714c7ebc61887...
Commit: b714c7ebc618872abca1c6c7764c84c50b7fbcbe
Parent: b522312678abaccd16b51299994e032d96a79267
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Tue Mar 25 10:17:34 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Mar 25 11:22:57 2014 +0100
clvmd: validate open device state
If clvmd does not hold any lock, it should also not keep any opened
device.
The reason for this patch is, that refresh_toolcontext calls
dev_cache_exit() which destroys whole device cache (even those with
opened file) - previous patch added recovery path to avoid memory
corruption, but opened files are still bugs that need to be fixed.
So this patch certainly kills many internal mirror & raid tests,
since they leak opened file descriptors (when tests are executed
with 'abort_on_error').
---
daemons/clvmd/lvm-functions.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c
index 622eb79..4ce0fcc 100644
--- a/daemons/clvmd/lvm-functions.c
+++ b/daemons/clvmd/lvm-functions.c
@@ -182,6 +182,15 @@ static void remove_info(const char *resource)
{
pthread_mutex_lock(&lv_hash_lock);
dm_hash_remove(lv_hash, resource);
+
+ /* When last lock is remove, validate there are not left opened devices */
+ if (!dm_hash_get_first(lv_hash)) {
+ if (dev_cache_check_for_open_devices())
+ log_error(INTERNAL_ERROR "Nothing is locked however there are still opened devices.");
+ if (critical_section())
+ log_error(INTERNAL_ERROR "Nothing is locked however clvmd is left in critical section.");
+ }
+
pthread_mutex_unlock(&lv_hash_lock);
}
9 years, 2 months
master - clvmd: hardening leak on exit
by Zdenek Kabelac
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=b522312678abac...
Commit: b522312678abaccd16b51299994e032d96a79267
Parent: 68d13b2517b49f53e395ea7754c6b8cf0b57dc0e
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Tue Mar 25 10:50:36 2014 +0100
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Tue Mar 25 11:22:57 2014 +0100
clvmd: hardening leak on exit
Operate with lvm_thread_exit while holding lvm_thread_mutex.
Don't leave unfinished work in the lvm thread queue
and always finish all queued tasks before exit,
so no cmd struct is left in the list.
(in-release fix)
---
daemons/clvmd/clvmd.c | 23 +++++++++++++++--------
1 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/daemons/clvmd/clvmd.c b/daemons/clvmd/clvmd.c
index 4648450..bc98ccb 100644
--- a/daemons/clvmd/clvmd.c
+++ b/daemons/clvmd/clvmd.c
@@ -2020,11 +2020,8 @@ static void *lvm_thread_fn(void *arg)
/* Now wait for some actual work */
pthread_mutex_lock(&lvm_thread_mutex);
- while (!lvm_thread_exit)
- if (dm_list_empty(&lvm_cmd_head)) {
- DEBUGLOG("LVM thread waiting for work\n");
- pthread_cond_wait(&lvm_thread_cond, &lvm_thread_mutex);
- } else {
+ for (;;) {
+ while (!dm_list_empty(&lvm_cmd_head)) {
cmd = dm_list_item(dm_list_first(&lvm_cmd_head),
struct lvm_thread_cmd);
dm_list_del(&cmd->list);
@@ -2037,6 +2034,13 @@ static void *lvm_thread_fn(void *arg)
pthread_mutex_lock(&lvm_thread_mutex);
}
+ if (lvm_thread_exit)
+ break;
+
+ DEBUGLOG("LVM thread waiting for work\n");
+ pthread_cond_wait(&lvm_thread_cond, &lvm_thread_mutex);
+ }
+
pthread_mutex_unlock(&lvm_thread_mutex);
DEBUGLOG("LVM thread exits\n");
@@ -2051,9 +2055,6 @@ static int add_to_lvmqueue(struct local_client *client, struct clvm_header *msg,
{
struct lvm_thread_cmd *cmd;
- if (lvm_thread_exit)
- return -1; /* We are about to exit */
-
if (!(cmd = dm_malloc(sizeof(*cmd))))
return ENOMEM;
@@ -2081,6 +2082,12 @@ static int add_to_lvmqueue(struct local_client *client, struct clvm_header *msg,
DEBUGLOG("add_to_lvmqueue: cmd=%p. client=%p, msg=%p, len=%d, csid=%p, xid=%d\n",
cmd, client, msg, msglen, csid, cmd->xid);
pthread_mutex_lock(&lvm_thread_mutex);
+ if (lvm_thread_exit) {
+ pthread_mutex_unlock(&lvm_thread_mutex);
+ dm_free(cmd->msg);
+ dm_free(cmd);
+ return -1; /* We are about to exit */
+ }
dm_list_add(&lvm_cmd_head, &cmd->list);
pthread_cond_signal(&lvm_thread_cond);
pthread_mutex_unlock(&lvm_thread_mutex);
9 years, 2 months