From 937a21f0d23edbc47fb618a86339cd35006e801f Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Mon, 10 Jan 2011 14:02:30 +0000 Subject: Speedup consequent activation calls Stop calling fs_unlock() from lv_de/activate(). Start using internal lvm fs cookie for dm_tree. Stop directly calling dm_udev_wait() and dm_tree_set/get_cookie() from activate code - it's now called through fs_unlock() function. Add lvm_do_fs_unlock() Call fs_unlock() when unlocking vg where implicit unlock solves the problem also for cluster - thus no extra command for clustering environment is required - only lvm_do_fs_unlock() function is added to call lvm's fs_unlock() while holding lvm_lock mutex in clvmd. Add fs_unlock() also to set_lv() so the command waits until devices are ready for regular open (i.e. wiping its begining). Move fs_unlock() prototype to activation.h to keep fs.h private in lib/activate dir and not expose other functions from this header. --- daemons/clvmd/clvmd-command.c | 1 + daemons/clvmd/lvm-functions.c | 7 +++++++ daemons/clvmd/lvm-functions.h | 1 + 3 files changed, 9 insertions(+) (limited to 'daemons') diff --git a/daemons/clvmd/clvmd-command.c b/daemons/clvmd/clvmd-command.c index 73c82579..bd6f348f 100644 --- a/daemons/clvmd/clvmd-command.c +++ b/daemons/clvmd/clvmd-command.c @@ -214,6 +214,7 @@ static int lock_vg(struct local_client *client) if (lkid == 0) return EINVAL; + lvm_do_fs_unlock(); /* Wait for devices */ status = sync_unlock(lockname, lkid); if (status) status = errno; diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c index 214f2295..cba6f445 100644 --- a/daemons/clvmd/lvm-functions.c +++ b/daemons/clvmd/lvm-functions.c @@ -894,6 +894,13 @@ struct dm_hash_node *get_next_excl_lock(struct dm_hash_node *v, char **name) return v; } +void lvm_do_fs_unlock(void) +{ + pthread_mutex_lock(&lvm_lock); + fs_unlock(); + pthread_mutex_unlock(&lvm_lock); +} + /* Called to initialise the LVM context of the daemon */ int init_clvm(int using_gulm, char **argv) { diff --git a/daemons/clvmd/lvm-functions.h b/daemons/clvmd/lvm-functions.h index 97153d49..a132f4af 100644 --- a/daemons/clvmd/lvm-functions.h +++ b/daemons/clvmd/lvm-functions.h @@ -36,5 +36,6 @@ extern char *get_last_lvm_error(void); extern void do_lock_vg(unsigned char command, unsigned char lock_flags, char *resource); extern struct dm_hash_node *get_next_excl_lock(struct dm_hash_node *v, char **name); +void lvm_do_fs_unlock(void); #endif -- cgit