From ac85c2e75bc3b2ecdf3bb8063ac473069adc4244 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Tue, 5 Jan 2010 16:05:12 +0000 Subject: [PATCH] Move processing of VG locks to separate function (similar to LV locks). And print some debugging info. No functional change in this patch. --- WHATS_NEW | 1 + daemons/clvmd/clvmd-command.c | 9 +++------ daemons/clvmd/lvm-functions.c | 17 ++++++++++++++--- daemons/clvmd/lvm-functions.h | 3 ++- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 13232af05..f40c5106a 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 2612a0e1e..1f8d0cfc1 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 c832ec59d..983f90f36 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 3fc3e0695..8b94e6919 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 -- 2.43.5