Index: LVM2.2.02.39/daemons/clvmd/lvm-functions.c
===================================================================
--- LVM2.2.02.39.orig/daemons/clvmd/lvm-functions.c
+++ LVM2.2.02.39/daemons/clvmd/lvm-functions.c
@@ -142,7 +142,7 @@ static const char *decode_flags(unsigned
 	static char buf[128];
 
 	sprintf(buf, "0x%x (%s%s%s%s)", flags,
-		flags & LCK_PARTIAL_MODE	  ? "PARTIAL " : "",
+		flags & LCK_PARTIAL_MODE	  ? "PARTIAL_MODE " : "",
 		flags & LCK_MIRROR_NOSYNC_MODE	  ? "MIRROR_NOSYNC " : "",
 		flags & LCK_DMEVENTD_MONITOR_MODE ? "DMEVENTD_MONITOR " : "",
 		flags & LCK_CONVERT ? "CONVERT " : "");
@@ -434,6 +434,8 @@ int do_lock_lv(unsigned char command, un
 	if (!(lock_flags & LCK_DMEVENTD_MONITOR_MODE))
 		init_dmeventd_monitor(0);
 
+	cmd->partial_activate = (lock_flags & LCK_PARTIAL_MODE) ? 1 : 0;
+
 	switch (command) {
 	case LCK_LV_EXCLUSIVE:
 		status = do_activate_lv(resource, lock_flags, LKM_EXMODE);
@@ -472,6 +474,8 @@ int do_lock_lv(unsigned char command, un
 	if (!(lock_flags & LCK_DMEVENTD_MONITOR_MODE))
 		init_dmeventd_monitor(DEFAULT_DMEVENTD_MONITOR);
 
+	cmd->partial_activate = 0;
+
 	/* clean the pool for another command */
 	dm_pool_empty(cmd->mem);
 	pthread_mutex_unlock(&lvm_lock);
Index: LVM2.2.02.39/lib/locking/cluster_locking.c
===================================================================
--- LVM2.2.02.39.orig/lib/locking/cluster_locking.c
+++ LVM2.2.02.39/lib/locking/cluster_locking.c
@@ -24,6 +24,7 @@
 #include "lvm-string.h"
 #include "locking.h"
 #include "locking_types.h"
+#include "toolcontext.h"
 
 #include <stddef.h>
 #include <sys/socket.h>
@@ -295,7 +296,8 @@ static int _cluster_free_request(lvm_res
 	return 1;
 }
 
-static int _lock_for_cluster(unsigned char cmd, uint32_t flags, const char *name)
+static int _lock_for_cluster(struct cmd_context *cmd,
+		unsigned char clvmd_cmd, uint32_t flags, const char *name)
 {
 	int status;
 	int i;
@@ -321,6 +323,9 @@ static int _lock_for_cluster(unsigned ch
 	if (dmeventd_monitor_mode())
 		args[1] |= LCK_DMEVENTD_MONITOR_MODE;
 
+	if (cmd->partial_activate)
+		args[1] |= LCK_PARTIAL_MODE;
+
 	/*
 	 * VG locks are just that: locks, and have no side effects
 	 * so we only need to do them on the local node because all
@@ -331,13 +336,13 @@ static int _lock_for_cluster(unsigned ch
 	 * the cluster because they might have side-effects.
 	 */
 	if (strncmp(name, "P_", 2) &&
-	    (cmd == CLVMD_CMD_LOCK_VG ||
+	    (clvmd_cmd == CLVMD_CMD_LOCK_VG ||
 	     (flags & LCK_TYPE_MASK) == LCK_EXCL ||
 	     (flags & LCK_LOCAL) ||
 	     !(flags & LCK_CLUSTER_VG)))
 		node = ".";
 
-	status = _cluster_request(cmd, node, args, len,
+	status = _cluster_request(clvmd_cmd, node, args, len,
 				  &response, &num_responses);
 
 	/* If any nodes were down then display them and return an error */
@@ -439,7 +444,7 @@ int lock_resource(struct cmd_context *cm
 	    ((flags & LCK_TYPE_MASK) == LCK_UNLOCK) &&
 	    (flags & LCK_CLUSTER_VG)) {
 		log_very_verbose("Requesing backup of VG metadata for %s", resource);
-		_lock_for_cluster(CLVMD_CMD_VG_BACKUP, LCK_CLUSTER_VG, resource);
+		_lock_for_cluster(cmd, CLVMD_CMD_VG_BACKUP, LCK_CLUSTER_VG, resource);
 	}
 
 	log_very_verbose("Locking %s %s %s %s%s%s%s (0x%x)", lock_scope, lockname,
@@ -451,7 +456,7 @@ int lock_resource(struct cmd_context *cm
 			 flags);
 
 	/* Send a message to the cluster manager */
-	return _lock_for_cluster(cluster_cmd, flags, lockname);
+	return _lock_for_cluster(cmd, cluster_cmd, flags, lockname);
 }
 
 #ifdef CLUSTER_LOCKING_INTERNAL
Index: LVM2.2.02.39/lib/locking/locking.h
===================================================================
--- LVM2.2.02.39.orig/lib/locking/locking.h
+++ LVM2.2.02.39/lib/locking/locking.h
@@ -83,6 +83,7 @@ int check_lvm1_vg_inactive(struct cmd_co
 /*
  * Additional lock bits for cluster communication
  */
+#define LCK_PARTIAL_MODE        0x00000001U	/* Partial activation? */
 #define LCK_MIRROR_NOSYNC_MODE	0x00000002U	/* Mirrors don't require sync */
 #define LCK_DMEVENTD_MONITOR_MODE	0x00000004U	/* Register with dmeventd */
 #define LCK_CONVERT                 0x00000008U /* Convert existing lock */
