master - locking: Add node parameter to query_resource.

Alasdair Kergon <[email protected]> Wed, 20 Jan 2016 00:59:23 +0000 (UTC)
Newsgroups dev.linux.lists.lvm-devel
Message-ID <[email protected]>
Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=c812c2dbc7ced09a715e5689f941ba255821f0bc
Commit:        c812c2dbc7ced09a715e5689f941ba255821f0bc
Parent:        7f6a1e6bbac41bb5d0e18876c23a7442c8c0d263
Author:        Alasdair G Kergon <[email protected]>
AuthorDate:    Tue Jan 19 21:42:22 2016 +0000
Committer:     Alasdair G Kergon <[email protected]>
CommitterDate: Tue Jan 19 21:42:22 2016 +0000

locking: Add node parameter to query_resource.

---
 daemons/clvmd/clvm.h          |    8 +++++---
 lib/activate/activate.c       |    2 +-
 lib/locking/cluster_locking.c |    7 +++----
 lib/locking/locking.c         |    4 ++--
 lib/locking/locking.h         |    7 ++++++-
 lib/locking/locking_types.h   |    2 +-
 lib/locking/no_locking.c      |    2 +-
 7 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/daemons/clvmd/clvm.h b/daemons/clvmd/clvm.h
index 716af40..10ef852 100644
--- a/daemons/clvmd/clvm.h
+++ b/daemons/clvmd/clvm.h
@@ -76,8 +76,10 @@ static const char CLVMD_SOCKNAME[]= DEFAULT_RUN_DIR "/clvmd.sock";
 #define CLVMD_CMD_SYNC_NAMES	    45
 
 /* Used internally by some callers, but not part of the protocol.*/
-#define NODE_ALL	"*"
-#define NODE_LOCAL	"."
-#define NODE_REMOTE	"^"
+#ifndef NODE_ALL
+#  define NODE_ALL	"*"
+#  define NODE_LOCAL	"."
+#  define NODE_REMOTE	"^"
+#endif
 
 #endif
diff --git a/lib/activate/activate.c b/lib/activate/activate.c
index 8f5b72b..4cd268e 100644
--- a/lib/activate/activate.c
+++ b/lib/activate/activate.c
@@ -1371,7 +1371,7 @@ static int _lv_is_active(const struct logical_volume *lv,
 	if (l && !exclusive)
 		goto out;
 
-	if ((r = remote_lock_held(lv->lvid.s, &e)) >= 0)
+	if ((r = cluster_lock_held(lv->lvid.s, "", &e)) >= 0)
 		goto out;
 
 	/*
diff --git a/lib/locking/cluster_locking.c b/lib/locking/cluster_locking.c
index 800f33d..517d09c 100644
--- a/lib/locking/cluster_locking.c
+++ b/lib/locking/cluster_locking.c
@@ -34,7 +34,7 @@
 
 #ifndef CLUSTER_LOCKING_INTERNAL
 int lock_resource(struct cmd_context *cmd, const char *resource, uint32_t flags, const struct logical_volume *lv __attribute__((unused)));
-int query_resource(const char *resource, int *mode);
+int query_resource(const char *resource, const char *node, int *mode);
 void locking_end(void);
 int locking_init(int type, struct dm_config_tree *cf, uint32_t *flags);
 #endif
@@ -530,13 +530,12 @@ static int decode_lock_type(const char *response)
 }
 
 #ifdef CLUSTER_LOCKING_INTERNAL
-static int _query_resource(const char *resource, int *mode)
+static int _query_resource(const char *resource, const char *node, int *mode)
 #else
-int query_resource(const char *resource, int *mode)
+int query_resource(const char *resource, const char *node, int *mode)
 #endif
 {
 	int i, status, len, num_responses, saved_errno;
-	const char *node = "";
 	char *args;
 	lvm_response_t *response = NULL;
 
diff --git a/lib/locking/locking.c b/lib/locking/locking.c
index 22e83d2..a11c09b 100644
--- a/lib/locking/locking.c
+++ b/lib/locking/locking.c
@@ -498,7 +498,7 @@ int locking_supports_remote_queries(void)
 	return (_locking.flags & LCK_SUPPORTS_REMOTE_QUERIES) ? 1 : 0;
 }
 
-int remote_lock_held(const char *vol, int *exclusive)
+int cluster_lock_held(const char *vol, const char *node, int *exclusive)
 {
 	int mode = LCK_NULL;
 
@@ -511,7 +511,7 @@ int remote_lock_held(const char *vol, int *exclusive)
 	/*
 	 * If an error occured, expect that volume is active
 	 */
-	if (!_locking.query_resource(vol, &mode)) {
+	if (!_locking.query_resource(vol, node, &mode)) {
 		stack;
 		return 1;
 	}
diff --git a/lib/locking/locking.h b/lib/locking/locking.h
index 706b59e..cb4f923 100644
--- a/lib/locking/locking.h
+++ b/lib/locking/locking.h
@@ -28,7 +28,12 @@ int vg_write_lock_held(void);
 int locking_is_clustered(void);
 int locking_supports_remote_queries(void);
 
-int remote_lock_held(const char *vol, int *exclusive);
+#ifndef NODE_ALL
+#  define NODE_ALL     "*"
+#  define NODE_LOCAL   "."
+#  define NODE_REMOTE  "^"
+#endif
+int cluster_lock_held(const char *vol, const char *node, int *exclusive);
 
 /*
  * LCK_VG:
diff --git a/lib/locking/locking_types.h b/lib/locking/locking_types.h
index 64d13db..5f0cd6b 100644
--- a/lib/locking/locking_types.h
+++ b/lib/locking/locking_types.h
@@ -18,7 +18,7 @@
 
 typedef int (*lock_resource_fn) (struct cmd_context * cmd, const char *resource,
 				 uint32_t flags, const struct logical_volume *lv);
-typedef int (*query_resource_fn) (const char *resource, int *mode);
+typedef int (*query_resource_fn) (const char *resource, const char *node, int *mode);
 
 typedef void (*fin_lock_fn) (void);
 typedef void (*reset_lock_fn) (void);
diff --git a/lib/locking/no_locking.c b/lib/locking/no_locking.c
index 6b0ac63..e909a24 100644
--- a/lib/locking/no_locking.c
+++ b/lib/locking/no_locking.c
@@ -70,7 +70,7 @@ static int _no_lock_resource(struct cmd_context *cmd, const char *resource,
 	return 1;
 }
 
-static int _no_query_resource(const char *resource, int *mode)
+static int _no_query_resource(const char *resource, const char *node, int *mode)
 {
 	log_very_verbose("Locking is disabled: Treating lock %s as not held.",
 			 resource);