All of lore.kernel.org
 help / color / mirror / Atom feed
* master - lvextend: refresh shared LV using select option
@ 2019-03-22 19:40 David Teigland
  0 siblings, 0 replies; only message in thread
From: David Teigland @ 2019-03-22 19:40 UTC (permalink / raw)
  To: lvm-devel

Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=86b96ede2af32404d0b7b5f516a35dafc4da442e
Commit:        86b96ede2af32404d0b7b5f516a35dafc4da442e
Parent:        85e68a8333722b7694d607652dd1f834fadfd8c4
Author:        David Teigland <teigland@redhat.com>
AuthorDate:    Fri Mar 22 14:28:02 2019 -0500
Committer:     David Teigland <teigland@redhat.com>
CommitterDate: Fri Mar 22 14:35:02 2019 -0500

lvextend: refresh shared LV using select option

Using --select 'lvname=LV && vgname=VG' avoids the problem
of the lvchange exit code not distinguishing an actual error
result vs the VG or LV not existing.  (This is in case there
is an odd dlm/gfs2 setup where some nodes are running the dlm
but do not have access to the VG.)
---
 daemons/lvmlockd/lvmlockd-dlm.c |   34 +++++++++++++++++++++++++++++++++-
 1 files changed, 33 insertions(+), 1 deletions(-)

diff --git a/daemons/lvmlockd/lvmlockd-dlm.c b/daemons/lvmlockd/lvmlockd-dlm.c
index 385d533..21aaa2d 100644
--- a/daemons/lvmlockd/lvmlockd-dlm.c
+++ b/daemons/lvmlockd/lvmlockd-dlm.c
@@ -781,15 +781,47 @@ int lm_is_running_dlm(void)
 
 int lm_refresh_lv_start_dlm(struct action *act)
 {
+	char path[PATH_MAX];
 	char command[DLMC_RUN_COMMAND_LEN];
 	char run_uuid[DLMC_RUN_UUID_LEN];
+	char *p, *vgname, *lvname;
 	int rv;
 
+	/* split /dev/vgname/lvname into vgname and lvname strings */
+	strncpy(path, act->path, strlen(act->path));
+
+	/* skip past dev */
+	p = strchr(path + 1, '/');
+
+	/* skip past slashes */
+	while (*p == '/')
+		p++;
+
+	/* start of vgname */
+	vgname = p;
+
+	/* skip past vgname */
+	while (*p != '/')
+		p++;
+
+	/* terminate vgname */
+	*p = '\0';
+	p++;
+
+	/* skip past slashes */
+	while (*p == '/')
+		p++;
+
+	lvname = p;
+
 	memset(command, 0, sizeof(command));
 	memset(run_uuid, 0, sizeof(run_uuid));
 
+	/* todo: add --readonly */
+
 	snprintf(command, DLMC_RUN_COMMAND_LEN,
-		 "lvm lvchange --refresh --nolocking %s", act->path);
+		 "lvm lvchange --refresh --partial --nolocking --select 'lvname=%s && vgname=%s'",
+		 lvname, vgname);
 
 	rv = dlmc_run_start(command, strlen(command), 0,
 			    DLMC_FLAG_RUN_START_NODE_NONE,



^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-03-22 19:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-22 19:40 master - lvextend: refresh shared LV using select option David Teigland

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.