summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2014-09-17 14:21:41 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2014-09-17 14:36:38 +0200
commitf90bc22ca532f5852aeaab92e0c40b36d65ef62d (patch)
treea091db7439364c2f17d28a859739be777aa91a13
parent9d57aa9a0fe00322cb188ad1f3103d57392546e7 (diff)
downloadlvm2-f90bc22ca532f5852aeaab92e0c40b36d65ef62d.tar.gz
locking: add locking_supports_remote_queries
Add function to detect whether locking could be used to query for lock type so we could recognize exclusive activation.
-rw-r--r--lib/locking/cluster_locking.c2
-rw-r--r--lib/locking/locking.c5
-rw-r--r--lib/locking/locking.h1
-rw-r--r--lib/locking/locking_types.h1
4 files changed, 8 insertions, 1 deletions
diff --git a/lib/locking/cluster_locking.c b/lib/locking/cluster_locking.c
index 0a11262f7..f2f4c80db 100644
--- a/lib/locking/cluster_locking.c
+++ b/lib/locking/cluster_locking.c
@@ -611,7 +611,7 @@ int init_cluster_locking(struct locking_type *locking, struct cmd_context *cmd,
locking->query_resource = _query_resource;
locking->fin_locking = _locking_end;
locking->reset_locking = _reset_locking;
- locking->flags = LCK_PRE_MEMLOCK | LCK_CLUSTERED;
+ locking->flags = LCK_PRE_MEMLOCK | LCK_CLUSTERED | LCK_SUPPORTS_REMOTE_QUERIES;
_clvmd_sock = _open_local_sock(suppress_messages);
if (_clvmd_sock == -1)
diff --git a/lib/locking/locking.c b/lib/locking/locking.c
index 9432f848b..544751e6c 100644
--- a/lib/locking/locking.c
+++ b/lib/locking/locking.c
@@ -492,6 +492,11 @@ int locking_is_clustered(void)
return (_locking.flags & LCK_CLUSTERED) ? 1 : 0;
}
+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 mode = LCK_NULL;
diff --git a/lib/locking/locking.h b/lib/locking/locking.h
index 284ce7a4c..1351cd269 100644
--- a/lib/locking/locking.h
+++ b/lib/locking/locking.h
@@ -26,6 +26,7 @@ void fin_locking(void);
void reset_locking(void);
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);
diff --git a/lib/locking/locking_types.h b/lib/locking/locking_types.h
index 6e4adcc3b..5fa5cba0f 100644
--- a/lib/locking/locking_types.h
+++ b/lib/locking/locking_types.h
@@ -25,6 +25,7 @@ typedef void (*reset_lock_fn) (void);
#define LCK_PRE_MEMLOCK 0x00000001 /* Is memlock() needed before calls? */
#define LCK_CLUSTERED 0x00000002
+#define LCK_SUPPORTS_REMOTE_QUERIES 0x00000004
struct locking_type {
uint32_t flags;