master - vgchange: fix disallowed LV types in lockd VG
by David Teigland
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=082fcc53cc82e7...
Commit: 082fcc53cc82e77e42af014623f8d9df4f1be173
Parent: 074295245b3f57310a2688a4628f016b17ba2f5d
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Jul 9 16:34:23 2015 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Thu Jul 9 16:34:23 2015 -0500
vgchange: fix disallowed LV types in lockd VG
cow snapshots work in lockd VG (they were wrongly
disallowed), but mirror type LVs do not yet work in
lockd VGs (they were wrongly allowed).
---
tools/vgchange.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/tools/vgchange.c b/tools/vgchange.c
index 437dbae..4b90b56 100644
--- a/tools/vgchange.c
+++ b/tools/vgchange.c
@@ -613,9 +613,9 @@ static int _vgchange_locktype(struct cmd_context *cmd,
dm_list_iterate_items(lvl, &vg->lvs) {
lv = lvl->lv;
- if ((lv->status & SNAPSHOT) || lv_is_cow(lv)) {
- log_error("Changing to lock type %s is not allowed with cow snapshot LV %s/%s",
- lock_type, vg->name, lv->name);
+ if (lv_is_mirror_type(lv)) {
+ log_error("Changing to lock type %s is not allowed with mirror type LV %s/%s",
+ lock_type, vg->name, display_lvname(lv));
return 0;
}
}
8 years, 9 months
master - pvcreate: remove recent warning message
by David Teigland
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=074295245b3f57...
Commit: 074295245b3f57310a2688a4628f016b17ba2f5d
Parent: cb14bbdbc93a129f0ef9cf37314691b7fe79050e
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Jul 9 15:26:32 2015 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Thu Jul 9 15:26:32 2015 -0500
pvcreate: remove recent warning message
log_warn was added recently because no known code used
the given condition, but running pvcreate on an existing
PV uses this case, and should not produce a warning.
---
lib/cache/lvmcache.c | 10 ++++------
1 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c
index d44f9d4..9f5b83a 100644
--- a/lib/cache/lvmcache.c
+++ b/lib/cache/lvmcache.c
@@ -1856,14 +1856,12 @@ struct lvmcache_info *lvmcache_add(struct labeller *labeller, const char *pvid,
}
/*
- * FIXME: when could this ever happen?
- * If this does happen, identify when/why here, and
- * if not, remove this code.
+ * This happens when running pvcreate on an existing PV.
*/
if (strcmp(pvid_s, existing->dev->pvid)) {
- log_warn("Replacing dev %s pvid %s with dev %s pvid %s",
- dev_name(existing->dev), existing->dev->pvid,
- dev_name(dev), pvid_s);
+ log_verbose("Replacing dev %s pvid %s with dev %s pvid %s",
+ dev_name(existing->dev), existing->dev->pvid,
+ dev_name(dev), pvid_s);
}
/*
8 years, 9 months
master - metadata: add comments describing lock_args for lvmlockd
by David Teigland
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=cb14bbdbc93a12...
Commit: cb14bbdbc93a129f0ef9cf37314691b7fe79050e
Parent: 841c3478fd1a20560db4ef01bfe30a7f8beb6608
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Jul 9 15:14:19 2015 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Thu Jul 9 15:16:28 2015 -0500
metadata: add comments describing lock_args for lvmlockd
---
lib/format_text/import_vsn1.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 40 insertions(+), 0 deletions(-)
diff --git a/lib/format_text/import_vsn1.c b/lib/format_text/import_vsn1.c
index 3645fa2..a4dcdf1 100644
--- a/lib/format_text/import_vsn1.c
+++ b/lib/format_text/import_vsn1.c
@@ -600,6 +600,25 @@ static int _read_lvnames(struct format_instance *fid __attribute__((unused)),
return 0;
}
+ /*
+ * The LV lock_args string is generated in lvmlockd, and the content
+ * depends on the lock_type.
+ *
+ * lock_type dlm does not use LV lock_args, so the LV lock_args field
+ * is just set to "dlm".
+ *
+ * lock_type sanlock uses the LV lock_args field to save the
+ * location on disk of that LV's sanlock lock. The disk name is
+ * specified in the VG lock_args. The lock_args string begins
+ * with a version number, e.g. 1.0.0, followed by a colon, followed
+ * by a number. The number is the offset on disk where sanlock is
+ * told to find the LV's lock.
+ * e.g. lock_args = 1.0.0:70254592
+ * means that the lock is located at offset 70254592.
+ *
+ * The lvmlockd code for each specific lock manager also validates
+ * the lock_args before using it to access the lock manager.
+ */
if (dm_config_get_str(lvn, "lock_args", &str)) {
if (!(lv->lock_args = dm_pool_strdup(mem, str)))
return_0;
@@ -828,6 +847,27 @@ static struct volume_group *_read_vg(struct format_instance *fid,
goto bad;
}
+ /*
+ * The VG lock_args string is generated in lvmlockd, and the content
+ * depends on the lock_type. lvmlockd begins the lock_args string
+ * with a version number, e.g. 1.0.0, followed by a colon, followed
+ * by a string that depends on the lock manager. The string after
+ * the colon is information needed to use the lock manager for the VG.
+ *
+ * For sanlock, the string is the name of the internal LV used to store
+ * sanlock locks. lvmlockd needs to know where the locks are located
+ * so it can pass that location to sanlock which needs to access the locks.
+ * e.g. lock_args = 1.0.0:lvmlock
+ * means that the locks are located on the the LV "lvmlock".
+ *
+ * For dlm, the string is the dlm cluster name. lvmlockd needs to use
+ * a dlm lockspace in this cluster to use the VG.
+ * e.g. lock_args = 1.0.0:foo
+ * means that the host needs to be a member of the cluster "foo".
+ *
+ * The lvmlockd code for each specific lock manager also validates
+ * the lock_args before using it to access the lock manager.
+ */
if (dm_config_get_str(vgn, "lock_args", &str)) {
if (!(vg->lock_args = dm_pool_strdup(vg->vgmem, str)))
goto bad;
8 years, 9 months
master - metadata: vg_validate lock_args
by David Teigland
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=841c3478fd1a20...
Commit: 841c3478fd1a20560db4ef01bfe30a7f8beb6608
Parent: 6294509cc6a6a4f6150e6f4de84483a7f54ad9b5
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Jul 9 13:24:28 2015 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Thu Jul 9 13:25:00 2015 -0500
metadata: vg_validate lock_args
---
lib/metadata/metadata.c | 91 +++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 84 insertions(+), 7 deletions(-)
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 07ef54e..b0aa122 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -2484,6 +2484,75 @@ static int _lv_validate_references_single(struct logical_volume *lv, void *data)
return r;
}
+/*
+ * Format is <version>:<info>
+ */
+static int _validate_lock_args_chars(const char *lock_args)
+{
+ int i;
+ char c;
+ int found_colon = 0;
+ int r = 1;
+
+ for (i = 0; i < strlen(lock_args); i++) {
+ c = lock_args[i];
+
+ if (!isalnum(c) && c != '.' && c != '_' && c != '-' && c != '+' && c != ':') {
+ log_error(INTERNAL_ERROR "Invalid character at index %d of lock_args \"%s\"",
+ i, lock_args);
+ r = 0;
+ }
+
+ if (c == ':' && found_colon) {
+ log_error(INTERNAL_ERROR "Invalid colon at index %d of lock_args \"%s\"",
+ i, lock_args);
+ r = 0;
+ }
+
+ if (c == ':')
+ found_colon = 1;
+ }
+
+ return r;
+}
+
+static int _validate_vg_lock_args(struct volume_group *vg)
+{
+ if (!_validate_lock_args_chars(vg->lock_args)) {
+ log_error(INTERNAL_ERROR "VG %s has invalid lock_args chars", vg->name);
+ return 0;
+ }
+
+ return 1;
+}
+
+/*
+ * For lock_type sanlock, LV lock_args are <version>:<info>
+ * For lock_type dlm, LV lock_args are not used, and lock_args is
+ * just set to "dlm".
+ */
+static int _validate_lv_lock_args(struct logical_volume *lv)
+{
+ int r = 1;
+
+ if (!strcmp(lv->vg->lock_type, "sanlock")) {
+ if (!_validate_lock_args_chars(lv->lock_args)) {
+ log_error(INTERNAL_ERROR "LV %s/%s has invalid lock_args chars",
+ lv->vg->name, display_lvname(lv));
+ return 0;
+ }
+
+ } else if (!strcmp(lv->vg->lock_type, "dlm")) {
+ if (strcmp(lv->lock_args, "dlm")) {
+ log_error(INTERNAL_ERROR "LV %s/%s has invalid lock_args \"%s\"",
+ lv->vg->name, display_lvname(lv), lv->lock_args);
+ r = 0;
+ }
+ }
+
+ return r;
+}
+
int vg_validate(struct volume_group *vg)
{
struct pv_list *pvl;
@@ -2829,6 +2898,9 @@ int vg_validate(struct volume_group *vg)
vg->name, vg->lock_type);
r = 0;
}
+
+ if (!vg->skip_validate_lock_args && !_validate_vg_lock_args(vg))
+ r = 0;
} else {
if (vg->lock_args) {
log_error(INTERNAL_ERROR "VG %s has lock_args %s without lock_type",
@@ -2840,13 +2912,22 @@ int vg_validate(struct volume_group *vg)
dm_list_iterate_items(lvl, &vg->lvs) {
if (is_lockd_type(vg->lock_type)) {
if (lockd_lv_uses_lock(lvl->lv)) {
- if (vg->skip_validate_lock_args) {
+ if (vg->skip_validate_lock_args)
continue;
- } else if (!lvl->lv->lock_args) {
+
+ if (!lvl->lv->lock_args) {
log_error(INTERNAL_ERROR "LV %s/%s missing lock_args",
vg->name, lvl->lv->name);
r = 0;
- } else if (!strcmp(vg->lock_type, "sanlock")) {
+ continue;
+ }
+
+ if (!_validate_lv_lock_args(lvl->lv)) {
+ r = 0;
+ continue;
+ }
+
+ if (!strcmp(vg->lock_type, "sanlock")) {
if (dm_hash_lookup(vhash.lv_lock_args, lvl->lv->lock_args)) {
log_error(INTERNAL_ERROR "LV %s/%s has duplicate lock_args %s.",
vg->name, lvl->lv->name, lvl->lv->lock_args);
@@ -2858,10 +2939,6 @@ int vg_validate(struct volume_group *vg)
r = 0;
}
- } else if (!strcmp(vg->lock_type, "dlm") && strcmp(lvl->lv->lock_args, "dlm")) {
- log_error(INTERNAL_ERROR "LV %s/%s bad dlm lock_args %s",
- vg->name, lvl->lv->name, lvl->lv->lock_args);
- r = 0;
}
} else {
if (lvl->lv->lock_args) {
8 years, 9 months
master - coverity: cleanup related to lvmlockd
by David Teigland
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=6294509cc6a6a4...
Commit: 6294509cc6a6a4f6150e6f4de84483a7f54ad9b5
Parent: 14811250420630d9f2f5f9aa3de7e8893b53e53b
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Thu Jul 9 11:28:59 2015 -0500
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Thu Jul 9 11:29:28 2015 -0500
coverity: cleanup related to lvmlockd
A couple missing mutex unlock on error bugs.
A bunch of buffer size/termination warnings.
---
daemons/lvmlockd/lvmlockd-core.c | 12 +++++++-----
daemons/lvmlockd/lvmlockd-dlm.c | 12 ++++++------
daemons/lvmlockd/lvmlockd-internal.h | 8 ++++----
daemons/lvmlockd/lvmlockd-sanlock.c | 32 ++++++++++++++++----------------
4 files changed, 33 insertions(+), 31 deletions(-)
diff --git a/daemons/lvmlockd/lvmlockd-core.c b/daemons/lvmlockd/lvmlockd-core.c
index fee0b88..19d96f0 100644
--- a/daemons/lvmlockd/lvmlockd-core.c
+++ b/daemons/lvmlockd/lvmlockd-core.c
@@ -647,6 +647,7 @@ static int add_pollfd(int fd)
tmp_pollfd = realloc(pollfd, new_size * sizeof(struct pollfd));
if (!tmp_pollfd) {
log_error("can't alloc new size %d for pollfd", new_size);
+ pthread_mutex_unlock(&pollfd_mutex);
return -ENOMEM;
}
pollfd = tmp_pollfd;
@@ -2994,15 +2995,15 @@ static int work_init_lv(struct action *act)
{
struct lockspace *ls;
char ls_name[MAX_NAME+1];
- char vg_args[MAX_ARGS];
- char lv_args[MAX_ARGS];
+ char vg_args[MAX_ARGS+1];
+ char lv_args[MAX_ARGS+1];
uint64_t free_offset = 0;
int lm_type = 0;
int rv = 0;
memset(ls_name, 0, sizeof(ls_name));
- memset(vg_args, 0, MAX_ARGS);
- memset(lv_args, 0, MAX_ARGS);
+ memset(vg_args, 0, sizeof(vg_args));
+ memset(lv_args, 0, sizeof(lv_args));
vg_ls_name(act->vg_name, ls_name);
@@ -3543,6 +3544,7 @@ static int add_lock_action(struct action *act)
/* should not happen */
log_error("S %s add_lock_action bad lm_type %d ls %d",
ls_name, act->lm_type, ls->lm_type);
+ pthread_mutex_unlock(&lockspaces_mutex);
return -EINVAL;
}
@@ -4622,7 +4624,7 @@ static char *get_dm_uuid(char *dm_name)
}
memset(_dm_uuid, 0, sizeof(_dm_uuid));
- strcpy(_dm_uuid, uuid);
+ strncpy(_dm_uuid, uuid, sizeof(_dm_uuid)-1);
dm_task_destroy(dmt);
return _dm_uuid;
diff --git a/daemons/lvmlockd/lvmlockd-dlm.c b/daemons/lvmlockd/lvmlockd-dlm.c
index f41599d..eaa2657 100644
--- a/daemons/lvmlockd/lvmlockd-dlm.c
+++ b/daemons/lvmlockd/lvmlockd-dlm.c
@@ -112,7 +112,7 @@ static int read_cluster_name(char *clustername)
return fd;
}
- rv = read(fd, clustername, MAX_ARGS - 1);
+ rv = read(fd, clustername, MAX_ARGS);
if (rv < 0) {
log_error("read_cluster_name: cluster name read error %d, check dlm_controld", fd);
if (close(fd))
@@ -130,8 +130,8 @@ static int read_cluster_name(char *clustername)
int lm_init_vg_dlm(char *ls_name, char *vg_name, uint32_t flags, char *vg_args)
{
- char clustername[MAX_ARGS];
- char lock_args_version[MAX_ARGS];
+ char clustername[MAX_ARGS+1];
+ char lock_args_version[MAX_ARGS+1];
int rv;
memset(clustername, 0, sizeof(clustername));
@@ -158,8 +158,8 @@ int lm_init_vg_dlm(char *ls_name, char *vg_name, uint32_t flags, char *vg_args)
int lm_prepare_lockspace_dlm(struct lockspace *ls)
{
- char sys_clustername[MAX_ARGS];
- char arg_clustername[MAX_ARGS];
+ char sys_clustername[MAX_ARGS+1];
+ char arg_clustername[MAX_ARGS+1];
struct lm_dlm *lmd;
int rv;
@@ -650,7 +650,7 @@ int lm_get_lockspaces_dlm(struct list_head *ls_rejoin)
int lm_is_running_dlm(void)
{
- char sys_clustername[MAX_ARGS];
+ char sys_clustername[MAX_ARGS+1];
int rv;
memset(sys_clustername, 0, sizeof(sys_clustername));
diff --git a/daemons/lvmlockd/lvmlockd-internal.h b/daemons/lvmlockd/lvmlockd-internal.h
index 9eee14a..e9b6277 100644
--- a/daemons/lvmlockd/lvmlockd-internal.h
+++ b/daemons/lvmlockd/lvmlockd-internal.h
@@ -127,8 +127,8 @@ struct action {
char vg_name[MAX_NAME+1];
char lv_name[MAX_NAME+1];
char lv_uuid[MAX_NAME+1];
- char vg_args[MAX_ARGS];
- char lv_args[MAX_ARGS];
+ char vg_args[MAX_ARGS+1];
+ char lv_args[MAX_ARGS+1];
char vg_sysid[MAX_NAME+1];
};
@@ -145,7 +145,7 @@ struct resource {
struct list_head locks;
struct list_head actions;
struct val_blk *vb;
- char lv_args[MAX_ARGS];
+ char lv_args[MAX_ARGS+1];
char lm_data[0]; /* lock manager specific data */
};
@@ -164,7 +164,7 @@ struct lockspace {
char name[MAX_NAME+1];
char vg_name[MAX_NAME+1];
char vg_uuid[64];
- char vg_args[MAX_ARGS]; /* lock manager specific args */
+ char vg_args[MAX_ARGS+1]; /* lock manager specific args */
char vg_sysid[MAX_NAME+1];
int8_t lm_type; /* lock manager: LM_DLM, LM_SANLOCK */
void *lm_data;
diff --git a/daemons/lvmlockd/lvmlockd-sanlock.c b/daemons/lvmlockd/lvmlockd-sanlock.c
index e83986b..28dac6b 100644
--- a/daemons/lvmlockd/lvmlockd-sanlock.c
+++ b/daemons/lvmlockd/lvmlockd-sanlock.c
@@ -167,7 +167,7 @@ static int lock_lv_name_from_args(char *vg_args, char *lock_lv_name)
static int lock_lv_offset_from_args(char *lv_args, uint64_t *lock_lv_offset)
{
- char offset_str[MAX_ARGS];
+ char offset_str[MAX_ARGS+1];
int rv;
memset(offset_str, 0, sizeof(offset_str));
@@ -256,8 +256,8 @@ int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_ar
struct sanlk_lockspace ss;
struct sanlk_resourced rd;
struct sanlk_disk disk;
- char lock_lv_name[MAX_ARGS];
- char lock_args_version[MAX_ARGS];
+ char lock_lv_name[MAX_ARGS+1];
+ char lock_args_version[MAX_ARGS+1];
const char *gl_name = NULL;
uint32_t daemon_version;
uint32_t daemon_proto;
@@ -285,7 +285,7 @@ int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_ar
if (strlen(lock_lv_name) + strlen(lock_args_version) + 2 > MAX_ARGS)
return -EARGS;
- snprintf(disk.path, SANLK_PATH_LEN, "/dev/mapper/%s-%s", vg_name, lock_lv_name);
+ snprintf(disk.path, SANLK_PATH_LEN-1, "/dev/mapper/%s-%s", vg_name, lock_lv_name);
log_debug("S %s init_vg_san path %s", ls_name, disk.path);
@@ -423,8 +423,8 @@ int lm_init_lv_sanlock(char *ls_name, char *vg_name, char *lv_name,
char *vg_args, char *lv_args, uint64_t free_offset)
{
struct sanlk_resourced rd;
- char lock_lv_name[MAX_ARGS];
- char lock_args_version[MAX_ARGS];
+ char lock_lv_name[MAX_ARGS+1];
+ char lock_args_version[MAX_ARGS+1];
uint64_t offset;
int align_size;
int rv;
@@ -445,7 +445,7 @@ int lm_init_lv_sanlock(char *ls_name, char *vg_name, char *lv_name,
strncpy(rd.rs.lockspace_name, ls_name, SANLK_NAME_LEN);
rd.rs.num_disks = 1;
- snprintf(rd.rs.disks[0].path, SANLK_PATH_LEN, "/dev/mapper/%s-%s", vg_name, lock_lv_name);
+ snprintf(rd.rs.disks[0].path, SANLK_PATH_LEN-1, "/dev/mapper/%s-%s", vg_name, lock_lv_name);
align_size = sanlock_align(&rd.rs.disks[0]);
if (align_size <= 0) {
@@ -529,7 +529,7 @@ int lm_rename_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_
struct sanlk_lockspace ss;
struct sanlk_resourced rd;
struct sanlk_disk disk;
- char lock_lv_name[MAX_ARGS];
+ char lock_lv_name[MAX_ARGS+1];
uint64_t offset;
uint32_t io_timeout;
int align_size;
@@ -550,7 +550,7 @@ int lm_rename_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_
return rv;
}
- snprintf(disk.path, SANLK_PATH_LEN, "/dev/mapper/%s-%s", vg_name, lock_lv_name);
+ snprintf(disk.path, SANLK_PATH_LEN-1, "/dev/mapper/%s-%s", vg_name, lock_lv_name);
log_debug("S %s rename_vg_san path %s", ls_name, disk.path);
@@ -730,7 +730,7 @@ int lm_ex_disable_gl_sanlock(struct lockspace *ls)
strncpy(rd2.rs.name, R_NAME_GL_DISABLED, SANLK_NAME_LEN);
rd1.rs.num_disks = 1;
- strncpy(rd1.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN);
+ strncpy(rd1.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
rd1.rs.disks[0].offset = lms->align_size * GL_LOCK_BEGIN;
rv = sanlock_acquire(lms->sock, -1, 0, 1, &rs1, NULL);
@@ -788,7 +788,7 @@ int lm_able_gl_sanlock(struct lockspace *ls, int enable)
strncpy(rd.rs.name, gl_name, SANLK_NAME_LEN);
rd.rs.num_disks = 1;
- strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN);
+ strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
rd.rs.disks[0].offset = lms->align_size * GL_LOCK_BEGIN;
rv = sanlock_write_resource(&rd.rs, 0, 0, 0);
@@ -827,7 +827,7 @@ static int gl_is_enabled(struct lockspace *ls, struct lm_sanlock *lms)
/* leave rs.name empty, it is what we're checking */
rd.rs.num_disks = 1;
- strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN);
+ strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
offset = lms->align_size * GL_LOCK_BEGIN;
rd.rs.disks[0].offset = offset;
@@ -885,7 +885,7 @@ int lm_find_free_lock_sanlock(struct lockspace *ls, uint64_t *free_offset)
strncpy(rd.rs.lockspace_name, ls->name, SANLK_NAME_LEN);
rd.rs.num_disks = 1;
- strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN);
+ strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
offset = lms->align_size * LV_LOCK_BEGIN;
@@ -960,7 +960,7 @@ int lm_prepare_lockspace_sanlock(struct lockspace *ls)
{
struct stat st;
struct lm_sanlock *lms = NULL;
- char lock_lv_name[MAX_ARGS];
+ char lock_lv_name[MAX_ARGS+1];
char lsname[SANLK_NAME_LEN + 1];
char disk_path[SANLK_PATH_LEN];
int gl_found;
@@ -983,7 +983,7 @@ int lm_prepare_lockspace_sanlock(struct lockspace *ls)
goto fail;
}
- snprintf(disk_path, SANLK_PATH_LEN, "/dev/mapper/%s-%s",
+ snprintf(disk_path, SANLK_PATH_LEN-1, "/dev/mapper/%s-%s",
ls->vg_name, lock_lv_name);
/*
@@ -1035,7 +1035,7 @@ int lm_prepare_lockspace_sanlock(struct lockspace *ls)
memcpy(lms->ss.name, lsname, SANLK_NAME_LEN);
lms->ss.host_id_disk.offset = 0;
lms->ss.host_id = ls->host_id;
- strncpy(lms->ss.host_id_disk.path, disk_path, SANLK_PATH_LEN);
+ strncpy(lms->ss.host_id_disk.path, disk_path, SANLK_PATH_LEN-1);
if (daemon_test) {
if (!gl_lsname_sanlock[0]) {
8 years, 9 months
master - libdaemon: config_make_nodes_v needs fixing
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=14811250420630...
Commit: 14811250420630d9f2f5f9aa3de7e8893b53e53b
Parent: 10d27998b3d2f6100e9e29e83d1d99948c55875f
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Thu Jul 9 16:34:02 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Thu Jul 9 16:34:08 2015 +0200
libdaemon: config_make_nodes_v needs fixing
Put the change from commit #10d27998b3d2f6100e9e29e83d1d99948c55875f
back so we have working tree again for now. This code needs a bit of
a cleanup to return proper return value to check...
---
lib/cache/lvmetad.c | 9 ++-------
libdaemon/client/config-util.c | 4 ++++
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c
index d22df75..60f0277 100644
--- a/lib/cache/lvmetad.c
+++ b/lib/cache/lvmetad.c
@@ -148,13 +148,12 @@ static int _lvmetad_pvscan_all_devs(struct cmd_context *cmd, activation_handler
static daemon_reply _lvmetad_send(const char *id, ...)
{
va_list ap;
- daemon_reply repl;
+ daemon_reply repl = { 0 };
daemon_request req;
unsigned num_rescans = 0;
unsigned total_usecs_waited = 0;
unsigned max_remaining_sleep_times = 1;
unsigned wait_usecs;
- int r;
retry:
req = daemon_request_make(id);
@@ -165,12 +164,8 @@ retry:
}
va_start(ap, id);
- r = daemon_request_extend_v(req, ap);
+ daemon_request_extend_v(req, ap);
va_end(ap);
- if (!r) {
- repl.error = ENOMEM;
- return repl;
- }
repl = daemon_send(_lvmetad, req);
diff --git a/libdaemon/client/config-util.c b/libdaemon/client/config-util.c
index 895815c..023257e 100644
--- a/libdaemon/client/config-util.c
+++ b/libdaemon/client/config-util.c
@@ -208,6 +208,10 @@ struct dm_config_node *make_int_node(struct dm_config_tree *cft,
return cn;
}
+/*
+ * FIXME: return 1 even if VA list is empty and return the
+ * dm_config_node* result as output parameter
+ */
struct dm_config_node *config_make_nodes_v(struct dm_config_tree *cft,
struct dm_config_node *parent,
struct dm_config_node *pre_sib,
8 years, 9 months
master - coverity: missing return value checks
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=10d27998b3d2f6...
Commit: 10d27998b3d2f6100e9e29e83d1d99948c55875f
Parent: a9a7c297aebe82ddc9092b7b19cc9cfcc27e117e
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Thu Jul 9 15:15:15 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Thu Jul 9 15:15:15 2015 +0200
coverity: missing return value checks
---
daemons/lvmetad/lvmetad-core.c | 3 ++-
daemons/lvmlockd/lvmlockctl.c | 3 ++-
daemons/lvmlockd/lvmlockd-core.c | 10 +++++++---
daemons/lvmlockd/lvmlockd-dlm.c | 10 +++++++---
daemons/lvmlockd/lvmlockd-sanlock.c | 9 ++++++---
daemons/lvmpolld/lvmpolld-data-utils.c | 8 ++++----
lib/cache/lvmetad.c | 29 ++++++++++++++++++++++-------
lib/locking/lvmlockd.c | 14 +++++++++-----
lib/report/report.c | 6 +++++-
9 files changed, 64 insertions(+), 28 deletions(-)
diff --git a/daemons/lvmetad/lvmetad-core.c b/daemons/lvmetad/lvmetad-core.c
index b4382c7..7b57dc4 100644
--- a/daemons/lvmetad/lvmetad-core.c
+++ b/daemons/lvmetad/lvmetad-core.c
@@ -1338,7 +1338,8 @@ inval:
if (!info)
goto bad;
memset(info, 0, sizeof(struct vg_info));
- dm_hash_insert(s->vgid_to_info, uuid, (void*)info);
+ if (!dm_hash_insert(s->vgid_to_info, uuid, (void*)info))
+ goto bad;
}
info->external_version = new_version;
diff --git a/daemons/lvmlockd/lvmlockctl.c b/daemons/lvmlockd/lvmlockctl.c
index bc5ec78..4b27a57 100644
--- a/daemons/lvmlockd/lvmlockctl.c
+++ b/daemons/lvmlockd/lvmlockctl.c
@@ -443,7 +443,8 @@ static int do_dump(const char *req_name)
else
format_info();
out:
- close(fd);
+ if (close(fd))
+ log_error("failed to close dump socket %d", fd);
return rv;
}
diff --git a/daemons/lvmlockd/lvmlockd-core.c b/daemons/lvmlockd/lvmlockd-core.c
index eee1da1..fee0b88 100644
--- a/daemons/lvmlockd/lvmlockd-core.c
+++ b/daemons/lvmlockd/lvmlockd-core.c
@@ -4347,7 +4347,9 @@ static void *client_thread_main(void *arg_in)
cl->id, cl->pi, cl->fd);
/* assert cl->pi != -1 */
/* assert pollfd[pi].fd == FD_IGNORE */
- close(cl->fd);
+ if (close(cl->fd))
+ log_error("client close %d pi %d fd %d failed",
+ cl->id, cl->pi, cl->fd);
rem_pollfd(cl->pi);
cl->pi = -1;
cl->fd = -1;
@@ -5534,7 +5536,8 @@ static int main_loop(daemon_state *ds_arg)
cl->pi = -1;
cl->fd = -1;
cl->poll_ignore = 0;
- close(pollfd[i].fd);
+ if (close(pollfd[i].fd))
+ log_error("close fd %d failed", pollfd[i].fd);
pollfd[i].fd = POLL_FD_UNUSED;
pollfd[i].events = 0;
pollfd[i].revents = 0;
@@ -5559,7 +5562,8 @@ static int main_loop(daemon_state *ds_arg)
/* don't think this can happen */
log_error("no client for index %d fd %d",
i, pollfd[i].fd);
- close(pollfd[i].fd);
+ if (close(pollfd[i].fd))
+ log_error("close fd %d failed", pollfd[i].fd);
pollfd[i].fd = POLL_FD_UNUSED;
pollfd[i].events = 0;
pollfd[i].revents = 0;
diff --git a/daemons/lvmlockd/lvmlockd-dlm.c b/daemons/lvmlockd/lvmlockd-dlm.c
index de19532..f41599d 100644
--- a/daemons/lvmlockd/lvmlockd-dlm.c
+++ b/daemons/lvmlockd/lvmlockd-dlm.c
@@ -96,6 +96,7 @@ static int check_args_version(char *vg_args)
static int read_cluster_name(char *clustername)
{
+ static const char close_error_msg[] = "read_cluster_name: close_error %d";
char *n;
int fd;
int rv;
@@ -114,14 +115,16 @@ static int read_cluster_name(char *clustername)
rv = read(fd, clustername, MAX_ARGS - 1);
if (rv < 0) {
log_error("read_cluster_name: cluster name read error %d, check dlm_controld", fd);
- close(fd);
+ if (close(fd))
+ log_error(close_error_msg, fd);
return rv;
}
n = strstr(clustername, "\n");
if (n)
*n = '\0';
- close(fd);
+ if (close(fd))
+ log_error(close_error_msg, fd);
return 0;
}
@@ -630,7 +633,8 @@ int lm_get_lockspaces_dlm(struct list_head *ls_rejoin)
continue;
if (!(ls = alloc_lockspace())) {
- closedir(ls_dir);
+ if (closedir(ls_dir))
+ log_error("lm_get_lockspace_dlm: closedir failed");
return -ENOMEM;
}
diff --git a/daemons/lvmlockd/lvmlockd-sanlock.c b/daemons/lvmlockd/lvmlockd-sanlock.c
index f52528f..e83986b 100644
--- a/daemons/lvmlockd/lvmlockd-sanlock.c
+++ b/daemons/lvmlockd/lvmlockd-sanlock.c
@@ -236,7 +236,8 @@ static int read_host_id_file(void)
break;
}
}
- fclose(file);
+ if (fclose(file))
+ log_error("failed to close host id file %s", daemon_host_id_file);
out:
log_debug("host_id %d from %s", host_id, daemon_host_id_file);
return host_id;
@@ -1138,7 +1139,8 @@ out:
return 0;
fail:
- close(lms->sock);
+ if (close(lms->sock))
+ log_error("failed to close sanlock daemon socket connection");
free(lms);
ls->lm_data = NULL;
return rv;
@@ -1174,7 +1176,8 @@ int lm_rem_lockspace_sanlock(struct lockspace *ls, int free_vg)
}
}
out:
- close(lms->sock);
+ if (close(lms->sock))
+ log_error("failed to close sanlock daemon socket connection");
free(lms);
ls->lm_data = NULL;
diff --git a/daemons/lvmpolld/lvmpolld-data-utils.c b/daemons/lvmpolld/lvmpolld-data-utils.c
index f28bc51..efe31cf 100644
--- a/daemons/lvmpolld/lvmpolld-data-utils.c
+++ b/daemons/lvmpolld/lvmpolld-data-utils.c
@@ -376,16 +376,16 @@ void lvmpolld_thread_data_destroy(void *thread_private)
data->errpipe[0] = -1;
if (data->outpipe[0] >= 0)
- close(data->outpipe[0]);
+ (void) close(data->outpipe[0]);
if (data->outpipe[1] >= 0)
- close(data->outpipe[1]);
+ (void) close(data->outpipe[1]);
if (data->errpipe[0] >= 0)
- close(data->errpipe[0]);
+ (void) close(data->errpipe[0]);
if (data->errpipe[1] >= 0)
- close(data->errpipe[1]);
+ (void) close(data->errpipe[1]);
dm_free(data);
}
diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c
index 8905640..d22df75 100644
--- a/lib/cache/lvmetad.c
+++ b/lib/cache/lvmetad.c
@@ -154,16 +154,23 @@ static daemon_reply _lvmetad_send(const char *id, ...)
unsigned total_usecs_waited = 0;
unsigned max_remaining_sleep_times = 1;
unsigned wait_usecs;
+ int r;
retry:
req = daemon_request_make(id);
- if (_lvmetad_token)
- daemon_request_extend(req, "token = %s", _lvmetad_token, NULL);
+ if (_lvmetad_token && !daemon_request_extend(req, "token = %s", _lvmetad_token, NULL)) {
+ repl.error = ENOMEM;
+ return repl;
+ }
va_start(ap, id);
- daemon_request_extend_v(req, ap);
+ r = daemon_request_extend_v(req, ap);
va_end(ap);
+ if (!r) {
+ repl.error = ENOMEM;
+ return repl;
+ }
repl = daemon_send(_lvmetad, req);
@@ -1052,7 +1059,10 @@ static struct volume_group *lvmetad_pvscan_vg(struct cmd_context *cmd, struct vo
if (!pvl->pv->dev)
continue;
- info = lvmcache_info_from_pvid((const char *)&pvl->pv->id, 0);
+ if (!(info = lvmcache_info_from_pvid((const char *)&pvl->pv->id, 0))) {
+ log_error("Failed to find cached info for PV %s.", pv_dev_name(pvl->pv));
+ return NULL;
+ }
baton.vg = NULL;
baton.fid = lvmcache_fmt(info)->ops->create_instance(lvmcache_fmt(info), &fic);
@@ -1351,7 +1361,8 @@ static int _lvmetad_get_pv_cache_list(struct cmd_context *cmd, struct dm_list *p
/*
* Opening the device RDWR should trigger a udev db update.
* FIXME: is there a better way to update the udev db than
- * doing an open/close of the device?
+ * doing an open/close of the device? - For example writing
+ * "change" to /sys/block/<device>/uevent?
*/
static void _update_pv_in_udev(struct cmd_context *cmd, dev_t devt)
{
@@ -1365,9 +1376,13 @@ static void _update_pv_in_udev(struct cmd_context *cmd, dev_t devt)
return;
}
- if (!dev_open(dev))
+ if (!dev_open(dev)) {
+ stack;
return;
- dev_close(dev);
+ }
+
+ if (!dev_close(dev))
+ stack;
}
/*
diff --git a/lib/locking/lvmlockd.c b/lib/locking/lvmlockd.c
index 4fdb818..b861334 100644
--- a/lib/locking/lvmlockd.c
+++ b/lib/locking/lvmlockd.c
@@ -898,6 +898,9 @@ int lockd_start_vg(struct cmd_context *cmd, struct volume_group *vg)
log_debug("lockd start VG %s lock_type %s",
vg->name, vg->lock_type ? vg->lock_type : "empty");
+ if (!id_write_format(&vg->id, uuid, sizeof(uuid)))
+ return_0;
+
if (vg->lock_type && !strcmp(vg->lock_type, "sanlock")) {
/*
* This is the big difference between starting
@@ -912,8 +915,6 @@ int lockd_start_vg(struct cmd_context *cmd, struct volume_group *vg)
host_id = find_config_tree_int(cmd, local_host_id_CFG, NULL);
}
- id_write_format(&vg->id, uuid, sizeof(uuid));
-
reply = _lockd_send("start_vg",
"pid = %d", getpid(),
"vg_name = %s", vg->name,
@@ -1806,7 +1807,8 @@ int lockd_lv_name(struct cmd_context *cmd, struct volume_group *vg,
if (!_lvmlockd_connected)
return 0;
- id_write_format(lv_id, lv_uuid, sizeof(lv_uuid));
+ if (!id_write_format(lv_id, lv_uuid, sizeof(lv_uuid)))
+ return_0;
/*
* For lvchange/vgchange activation, def_mode is "sh" or "ex"
@@ -2000,7 +2002,8 @@ static int _init_lv_sanlock(struct cmd_context *cmd, struct volume_group *vg,
if (!_lvmlockd_connected)
return 0;
- id_write_format(lv_id, lv_uuid, sizeof(lv_uuid));
+ if (!id_write_format(lv_id, lv_uuid, sizeof(lv_uuid)))
+ return_0;
reply = _lockd_send("init_lv",
"pid = %d", getpid(),
@@ -2066,7 +2069,8 @@ static int _free_lv(struct cmd_context *cmd, struct volume_group *vg,
if (!_lvmlockd_connected)
return 0;
- id_write_format(lv_id, lv_uuid, sizeof(lv_uuid));
+ if (!id_write_format(lv_id, lv_uuid, sizeof(lv_uuid)))
+ return_0;
reply = _lockd_send("free_lv",
"pid = %d", getpid(),
diff --git a/lib/report/report.c b/lib/report/report.c
index 80d189a..79802b7 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1004,7 +1004,11 @@ static int _translate_time_items(struct dm_report *rh, struct time_info *info,
dm_pool_free(info->mem, info->ti_list);
info->ti_list = NULL;
- dm_snprintf(buf, sizeof(buf), "@%ld:@%ld", t1, t2);
+ if (dm_snprintf(buf, sizeof(buf), "@%ld:@%ld", t1, t2) == -1) {
+ log_error("_translate_time_items: dm_snprintf failed");
+ return 0;
+ }
+
if (!(*data_out = dm_pool_strdup(info->mem, buf))) {
log_error("_translate_time_items: dm_pool_strdup failed");
return 0;
8 years, 9 months
master - coverity: missing return value for dm_split_lvm_name pass proper DM name instead of NULL value
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=a9a7c297aebe82...
Commit: a9a7c297aebe82ddc9092b7b19cc9cfcc27e117e
Parent: 023cf21848bdf75bade560f6f43b2dea62a54f80
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Thu Jul 9 13:11:57 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Thu Jul 9 13:11:57 2015 +0200
coverity: missing return value for dm_split_lvm_name pass proper DM name instead of NULL value
---
daemons/lvmlockd/lvmlockd-core.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/daemons/lvmlockd/lvmlockd-core.c b/daemons/lvmlockd/lvmlockd-core.c
index ff5510c..eee1da1 100644
--- a/daemons/lvmlockd/lvmlockd-core.c
+++ b/daemons/lvmlockd/lvmlockd-core.c
@@ -4726,7 +4726,10 @@ static int remove_inactive_lvs(struct list_head *vg_lockd)
strncpy(namebuf, names->name, MAX_NAME);
vgname = namebuf;
- dm_split_lvm_name(NULL, NULL, &vgname, &lvname, &layer);
+ if (!dm_split_lvm_name(NULL, namebuf, &vgname, &lvname, &layer)) {
+ log_error("failed to split dm name %s", namebuf);
+ goto next_dmname;
+ }
log_debug("adopt remove_inactive dm name %s dm uuid %s vgname %s lvname %s",
names->name, dm_uuid, vgname, lvname);
8 years, 9 months
master - coverity: fix possible invalid dereferences
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=023cf21848bdf7...
Commit: 023cf21848bdf75bade560f6f43b2dea62a54f80
Parent: cb305b9fc0ae3f554b71aa3839d091424c660e63
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Thu Jul 9 12:07:34 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Thu Jul 9 12:07:41 2015 +0200
coverity: fix possible invalid dereferences
lib/format1/import-export.c:167: var_deref_op: Dereferencing null pointer "vg->lvm1_system_id"
lib/cache/lvmetad.c:1023: var_deref_op: Dereferencing null pointer "this"
daemons/lvmlockd/lvmlockd-core.c:2659: check_after_deref: Null-checking "act" suggests that it may be null, but it has already been dereferenced on all paths leading to the check
/daemons/lvmetad/lvmetad-core.c:1024: check_after_deref: Null-checking "pvmeta" suggests that it may be null, but it has already been dereferenced on all paths leading to the check
---
daemons/lvmetad/lvmetad-core.c | 6 ++----
daemons/lvmlockd/lvmlockd-core.c | 3 +--
lib/cache/lvmetad.c | 3 ++-
lib/format1/import-export.c | 2 +-
4 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/daemons/lvmetad/lvmetad-core.c b/daemons/lvmetad/lvmetad-core.c
index f4e77b7..b4382c7 100644
--- a/daemons/lvmetad/lvmetad-core.c
+++ b/daemons/lvmetad/lvmetad-core.c
@@ -999,7 +999,8 @@ static response pv_gone(lvmetad_state *s, request r)
DEBUGLOG(s, "pv_gone (updated): %s / %" PRIu64, pvid, device);
- pvmeta = dm_hash_lookup(s->pvid_to_pvmeta, pvid);
+ if (!(pvmeta = dm_hash_lookup(s->pvid_to_pvmeta, pvid)))
+ return reply_unknown("PVID does not exist");
vgid = dm_hash_lookup(s->pvid_to_vgid, pvid);
dm_hash_remove_binary(s->device_to_pvid, &device, sizeof(device));
@@ -1021,9 +1022,6 @@ static response pv_gone(lvmetad_state *s, request r)
dm_free(vgid);
}
- if (!pvmeta)
- return reply_unknown("PVID does not exist");
-
if (!alt_device)
dm_config_destroy(pvmeta);
diff --git a/daemons/lvmlockd/lvmlockd-core.c b/daemons/lvmlockd/lvmlockd-core.c
index 1b7f494..ff5510c 100644
--- a/daemons/lvmlockd/lvmlockd-core.c
+++ b/daemons/lvmlockd/lvmlockd-core.c
@@ -2661,8 +2661,7 @@ static int rem_lockspace(struct action *act)
}
ls->thread_work = 1;
ls->thread_stop = 1;
- if (act)
- list_add_tail(&act->list, &ls->actions);
+ list_add_tail(&act->list, &ls->actions);
pthread_cond_signal(&ls->cond);
pthread_mutex_unlock(&ls->mutex);
pthread_mutex_unlock(&lockspaces_mutex);
diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c
index 783a114..8905640 100644
--- a/lib/cache/lvmetad.c
+++ b/lib/cache/lvmetad.c
@@ -1017,7 +1017,8 @@ static int _lvmetad_pvscan_single(struct metadata_area *mda, void *baton)
struct _lvmetad_pvscan_baton *b = baton;
struct volume_group *this;
- this = mda_is_ignored(mda) ? NULL : mda->ops->vg_read(b->fid, "", mda, NULL, NULL, 1);
+ if (!(this = mda_is_ignored(mda) ? NULL : mda->ops->vg_read(b->fid, "", mda, NULL, NULL, 1)))
+ return 1;
/* FIXME Also ensure contents match etc. */
if (!b->vg || this->seqno > b->vg->seqno)
diff --git a/lib/format1/import-export.c b/lib/format1/import-export.c
index 72f6946..275583d 100644
--- a/lib/format1/import-export.c
+++ b/lib/format1/import-export.c
@@ -164,7 +164,7 @@ int export_pv(struct cmd_context *cmd, struct dm_pool *mem __attribute__((unused
/* Is VG already exported or being exported? */
if (vg && vg_is_exported(vg)) {
/* Does system_id need setting? */
- if (!*vg->lvm1_system_id ||
+ if ((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, EXPORTED_TAG))
8 years, 9 months
master - lvmconf: fix ignored --startstopservices in lvmconf ... --mirrorservice on systemd
by Peter Rajnoha
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=cb305b9fc0ae3f...
Commit: cb305b9fc0ae3f554b71aa3839d091424c660e63
Parent: a0cc570f86ad267e4903aac9bedaecaf22e8d714
Author: Peter Rajnoha <prajnoha(a)redhat.com>
AuthorDate: Thu Jul 9 10:35:41 2015 +0200
Committer: Peter Rajnoha <prajnoha(a)redhat.com>
CommitterDate: Thu Jul 9 10:40:14 2015 +0200
lvmconf: fix ignored --startstopservices in lvmconf ... --mirrorservice on systemd
If running lvmconf ... --startstopservice --mirrorservice in systemd
environment, handle lvm2-cmirrord accordingly. A typo in the script
caused the lvm2-cmirrord to not start/stop immediately, it was
only enabled/disabled (so the --startstopservice was ignored in this
case).
---
WHATS_NEW | 1 +
scripts/lvmconf.sh | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 1a8bbbb..f3da3e0 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.126 -
================================
+ Fix ignored --startstopservices option if running lvmconf with systemd.
Version 2.02.125 - 7th July 2015
================================
diff --git a/scripts/lvmconf.sh b/scripts/lvmconf.sh
index 396f7a1..c3c1700 100644
--- a/scripts/lvmconf.sh
+++ b/scripts/lvmconf.sh
@@ -412,12 +412,12 @@ if [ "$HANDLE_SERVICES" == "1" ]; then
if [ "$LOCKING_TYPE" = "3" ]; then
set_service systemd activate lvm2-cluster-activation.service
- if [ "$HANDLE_CMIRROR_SERVICE" ]; then
+ if [ "$HANDLE_MIRROR_SERVICE" = "1" ]; then
set_service activate lvm2-cmirrord.service
fi
else
set_service systemd deactivate lvm2-cluster-activation.service
- if [ "$HANDLE_CMIRROR_SERVICE" ]; then
+ if [ "$HANDLE_MIRROR_SERVICE" = "1" ]; then
set_service systemd deactivate lvm2-cmirrord.service
fi
fi
8 years, 9 months