summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Broz <mbroz@redhat.com>2010-01-05 16:05:12 +0000
committerMilan Broz <mbroz@redhat.com>2010-01-05 16:05:12 +0000
commitac85c2e75bc3b2ecdf3bb8063ac473069adc4244 (patch)
tree7b4b2adc43af9a66a6cf4092166c130a85381ebe
parentd7f44761abede516695eee34cc382f97e5ae3094 (diff)
downloadlvm2-ac85c2e75bc3b2ecdf3bb8063ac473069adc4244.tar.gz
lvm2-ac85c2e75bc3b2ecdf3bb8063ac473069adc4244.tar.xz
lvm2-ac85c2e75bc3b2ecdf3bb8063ac473069adc4244.zip
Move processing of VG locks to separate function (similar to LV locks).
And print some debugging info. No functional change in this patch.
-rw-r--r--WHATS_NEW1
-rw-r--r--daemons/clvmd/clvmd-command.c9
-rw-r--r--daemons/clvmd/lvm-functions.c17
-rw-r--r--daemons/clvmd/lvm-functions.h3
4 files changed, 20 insertions, 10 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 13232af0..f40c5106 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.57 -
====================================
+ Move processing of VG locks to separate function in clvmd.
Properly decode flags even for VG locks.
Properly handle precommitted flag in cache when commited data only present.
Resume renamed volumes in reverse order to preserve memlock pairing.
diff --git a/daemons/clvmd/clvmd-command.c b/daemons/clvmd/clvmd-command.c
index 2612a0e1..1f8d0cfc 100644
--- a/daemons/clvmd/clvmd-command.c
+++ b/daemons/clvmd/clvmd-command.c
@@ -119,15 +119,12 @@ int do_command(struct local_client *client, struct clvm_header *msg, int msglen,
break;
case CLVMD_CMD_LOCK_VG:
+ lock_cmd = args[0];
+ lock_flags = args[1];
lockname = &args[2];
/* Check to see if the VG is in use by LVM1 */
status = do_check_lvm1(lockname);
- /* P_#global causes a full cache refresh */
- if (!strcmp(lockname, "P_" VG_GLOBAL))
- do_refresh_cache();
- else
- drop_metadata(lockname + 2);
-
+ do_lock_vg(lock_cmd, lock_flags, lockname);
break;
case CLVMD_CMD_LOCK_LV:
diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c
index c832ec59..983f90f3 100644
--- a/daemons/clvmd/lvm-functions.c
+++ b/daemons/clvmd/lvm-functions.c
@@ -676,12 +676,23 @@ static void drop_vg_locks()
}
/*
- * Drop lvmcache metadata
+ * Handle VG lock - drop metadata or update lvmcache state
*/
-void drop_metadata(const char *vgname)
+void do_lock_vg(unsigned char command, unsigned char lock_flags, char *resource)
{
- DEBUGLOG("Dropping metadata for VG %s\n", vgname);
+ char *vgname = resource + 2;
+
+ DEBUGLOG("do_lock_vg: resource '%s', cmd = %s, flags = %s, memlock = %d\n",
+ resource, decode_locking_cmd(command), decode_flags(lock_flags), memlock());
+
+ /* P_#global causes a full cache refresh */
+ if (!strcmp(resource, "P_" VG_GLOBAL)) {
+ do_refresh_cache();
+ return;
+ }
+
pthread_mutex_lock(&lvm_lock);
+ DEBUGLOG("Dropping metadata for VG %s\n", vgname);
lvmcache_drop_metadata(vgname);
pthread_mutex_unlock(&lvm_lock);
}
diff --git a/daemons/clvmd/lvm-functions.h b/daemons/clvmd/lvm-functions.h
index 3fc3e069..8b94e691 100644
--- a/daemons/clvmd/lvm-functions.h
+++ b/daemons/clvmd/lvm-functions.h
@@ -35,6 +35,7 @@ extern void lvm_do_backup(const char *vgname);
extern int hold_unlock(char *resource);
extern int hold_lock(char *resource, int mode, int flags);
extern char *get_last_lvm_error(void);
-extern void drop_metadata(const char *vgname);
+extern void do_lock_vg(unsigned char command, unsigned char lock_flags,
+ char *resource);
#endif