[lvm-devel] [PATCH 13/25] Replicator: lock_vol update replicator LV

Zdenek Kabelac zkabelac at redhat.com
Wed Mar 17 13:47:06 UTC 2010


Add LCK_MISSING_VG flag to sinal missing VG to _lock_vol function.
This way we easily detect whether we still need to lock more VGs
while having all data available - it would be ackware to resolve it
from resource uuid string. In the case  missing VG is found,
whole whole operation must be retried - this usually requires to
release all locks, and take them again in the alphabetic order.

Signed-off-by: Zdenek Kabelac <zkabelac at redhat.com>
---
 lib/locking/locking.c |    3 +++
 lib/locking/locking.h |    7 ++++++-
 2 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/lib/locking/locking.c b/lib/locking/locking.c
index 76dbda5..57b7ba9 100644
--- a/lib/locking/locking.c
+++ b/lib/locking/locking.c
@@ -362,6 +362,9 @@ static int _lock_vol(struct cmd_context *cmd, const char *resource,
 {
 	int ret = 0;
 
+	if (flags & LCK_MISSING_VG)
+		return_0;
+
 	_block_signals(flags);
 	_lock_memory(cmd, lv_op);
 
diff --git a/lib/locking/locking.h b/lib/locking/locking.h
index e7f25b9..da442ec 100644
--- a/lib/locking/locking.h
+++ b/lib/locking/locking.h
@@ -86,6 +86,7 @@ int check_lvm1_vg_inactive(struct cmd_context *cmd, const char *vgname);
 #define LCK_LOCAL	0x00000040U	/* Don't propagate to other nodes */
 #define LCK_CLUSTER_VG	0x00000080U	/* VG is clustered */
 #define LCK_CACHE	0x00000100U	/* Operation on cache only using P_ lock */
+#define LCK_MISSING_VG	0x00000200U	/* 'Remote' VG misses lock for this LV */
 
 /*
  * Additional lock bits for cluster communication
@@ -128,8 +129,12 @@ int check_lvm1_vg_inactive(struct cmd_context *cmd, const char *vgname);
 #define LCK_LV_CLUSTERED(lv)	\
 	(vg_is_clustered((lv)->vg) ? LCK_CLUSTER_VG : 0)
 
+#define LCK_CHECK_MISSING_VG(lv)	\
+	(lv_replicator_sites_check_vg((lv)) ? 0 : LCK_MISSING_VG)
+
 #define lock_lv_vol(cmd, lv, flags)	\
-	lock_vol(cmd, (lv)->lvid.s, flags | LCK_LV_CLUSTERED(lv))
+	lock_vol(cmd, (lv)->lvid.s, flags | LCK_LV_CLUSTERED(lv) | \
+		 LCK_CHECK_MISSING_VG(lv))
 
 #define unlock_vg(cmd, vol)	lock_vol(cmd, vol, LCK_VG_UNLOCK)
 #define unlock_and_release_vg(cmd, vg, vol) \
-- 
1.7.0.1




More information about the lvm-devel mailing list