summaryrefslogtreecommitdiffstats
path: root/daemons/clvmd/clvmd-command.c
diff options
context:
space:
mode:
authorMilan Broz <mbroz@redhat.com>2009-05-19 10:38:58 +0000
committerMilan Broz <mbroz@redhat.com>2009-05-19 10:38:58 +0000
commitfa6dca9f28c2434905687c53122361d7cecf7f63 (patch)
treeb891b2a08f352cf3d476a55e6375909013443f37 /daemons/clvmd/clvmd-command.c
parent8dd0ae923b627fe04da2b431605740cff1dca8b1 (diff)
downloadlvm2-fa6dca9f28c2434905687c53122361d7cecf7f63.tar.gz
lvm2-fa6dca9f28c2434905687c53122361d7cecf7f63.tar.xz
lvm2-fa6dca9f28c2434905687c53122361d7cecf7f63.zip
Add infrastructure for queriying for remote locks.
Current code, when need to ensure that volume is not active on remote node, it need to try to exclusive activate volume. Patch adds simple clvmd command which queries all nodes for lock for given resource. The lock type is returned in reply in text. (But code currently uses CR and EX modes only.)
Diffstat (limited to 'daemons/clvmd/clvmd-command.c')
-rw-r--r--daemons/clvmd/clvmd-command.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/daemons/clvmd/clvmd-command.c b/daemons/clvmd/clvmd-command.c
index dffff216..2266a2be 100644
--- a/daemons/clvmd/clvmd-command.c
+++ b/daemons/clvmd/clvmd-command.c
@@ -90,6 +90,7 @@ int do_command(struct local_client *client, struct clvm_header *msg, int msglen,
int arglen = msglen - sizeof(struct clvm_header) - strlen(msg->node);
int status = 0;
char *lockname;
+ const char *locktype;
struct utsname nodeinfo;
unsigned char lock_cmd;
unsigned char lock_flags;
@@ -144,6 +145,14 @@ int do_command(struct local_client *client, struct clvm_header *msg, int msglen,
}
break;
+ case CLVMD_CMD_LOCK_QUERY:
+ lockname = &args[2];
+ if (buflen < 3)
+ return EIO;
+ if ((locktype = do_lock_query(lockname)))
+ *retlen = 1 + snprintf(*buf, buflen, "%s", locktype);
+ break;
+
case CLVMD_CMD_REFRESH:
do_refresh_cache();
break;
@@ -278,6 +287,7 @@ int do_pre_command(struct local_client *client)
case CLVMD_CMD_GET_CLUSTERNAME:
case CLVMD_CMD_SET_DEBUG:
case CLVMD_CMD_VG_BACKUP:
+ case CLVMD_CMD_LOCK_QUERY:
break;
default:
@@ -308,6 +318,7 @@ int do_post_command(struct local_client *client)
case CLVMD_CMD_LOCK_VG:
case CLVMD_CMD_VG_BACKUP:
+ case CLVMD_CMD_LOCK_QUERY:
/* Nothing to do here */
break;