summaryrefslogtreecommitdiff
path: root/lib/locking
diff options
context:
space:
mode:
authorAlasdair G Kergon <agk@redhat.com>2014-04-18 02:46:34 +0100
committerAlasdair G Kergon <agk@redhat.com>2014-04-18 02:46:34 +0100
commitb5f8f452ac563ef07513e770b3202c6dc209443c (patch)
treec75307dffc7318a7855730afa0589fe851cb688f /lib/locking
parent17e304e0ac24ba0d1887badfb51afa731aa138e9 (diff)
downloadlvm2-b5f8f452ac563ef07513e770b3202c6dc209443c.tar.gz
tools: Add --readonly support.
Offer lock-free access to display virtual machine or clustered VG metadata while it might be in use.
Diffstat (limited to 'lib/locking')
-rw-r--r--lib/locking/locking.c5
-rw-r--r--lib/locking/locking_types.h7
-rw-r--r--lib/locking/no_locking.c14
3 files changed, 21 insertions, 5 deletions
diff --git a/lib/locking/locking.c b/lib/locking/locking.c
index 9433e4027..b5250c10b 100644
--- a/lib/locking/locking.c
+++ b/lib/locking/locking.c
@@ -284,6 +284,11 @@ int init_locking(int type, struct cmd_context *cmd, int suppress_messages)
break;
return 1;
+ case 5:
+ init_dummy_locking(&_locking, cmd, suppress_messages);
+ log_verbose("Locking disabled for read-only access.");
+ return 1;
+
default:
log_error("Unknown locking type requested.");
return 0;
diff --git a/lib/locking/locking_types.h b/lib/locking/locking_types.h
index 300949096..6e4adcc3b 100644
--- a/lib/locking/locking_types.h
+++ b/lib/locking/locking_types.h
@@ -38,8 +38,11 @@ struct locking_type {
/*
* Locking types
*/
-int init_no_locking(struct locking_type *locking, struct cmd_context *cmd,
- int suppress_messages);
+void init_no_locking(struct locking_type *locking, struct cmd_context *cmd,
+ int suppress_messages);
+
+void init_dummy_locking(struct locking_type *locking, struct cmd_context *cmd,
+ int suppress_messages);
int init_readonly_locking(struct locking_type *locking, struct cmd_context *cmd,
int suppress_messages);
diff --git a/lib/locking/no_locking.c b/lib/locking/no_locking.c
index dac2f8085..f7718be5c 100644
--- a/lib/locking/no_locking.c
+++ b/lib/locking/no_locking.c
@@ -91,7 +91,7 @@ static int _readonly_lock_resource(struct cmd_context *cmd,
return _no_lock_resource(cmd, resource, flags, lv);
}
-int init_no_locking(struct locking_type *locking, struct cmd_context *cmd __attribute__((unused)),
+void init_no_locking(struct locking_type *locking, struct cmd_context *cmd __attribute__((unused)),
int suppress_messages)
{
locking->lock_resource = _no_lock_resource;
@@ -99,8 +99,6 @@ int init_no_locking(struct locking_type *locking, struct cmd_context *cmd __attr
locking->reset_locking = _no_reset_locking;
locking->fin_locking = _no_fin_locking;
locking->flags = LCK_CLUSTERED;
-
- return 1;
}
int init_readonly_locking(struct locking_type *locking, struct cmd_context *cmd __attribute__((unused)),
@@ -114,3 +112,13 @@ int init_readonly_locking(struct locking_type *locking, struct cmd_context *cmd
return 1;
}
+
+void init_dummy_locking(struct locking_type *locking, struct cmd_context *cmd __attribute__((unused)),
+ int suppress_messages)
+{
+ locking->lock_resource = _readonly_lock_resource;
+ locking->query_resource = _no_query_resource;
+ locking->reset_locking = _no_reset_locking;
+ locking->fin_locking = _no_fin_locking;
+ locking->flags = LCK_CLUSTERED;
+}