[lvm-devel] [PATCH 1/9] Enforce an alphabetical lock ordering for vgname locks.
Alasdair G Kergon
agk at redhat.com
Wed Sep 2 13:38:48 UTC 2009
On Thu, Aug 13, 2009 at 05:26:55PM -0400, Dave Wysochanski wrote:
> --- a/lib/cache/lvmcache.c
> +++ b/lib/cache/lvmcache.c
> @@ -186,6 +186,42 @@ void lvmcache_drop_metadata(const char *vgname)
> _drop_metadata(vgname);
> }
Please document what this function returns here.
(Normally you'd expect a compare fn to return an integer.)
> +static const char * _compare_lock_name(struct dm_hash_node *n,
> + const char *vgname)
> +{
> +/*
> + * Enforce alphabetical order of vgname locks
* Ensure VG locks are acquired in alphabetical order.
> + */
> +int lvmcache_verify_lock_order(const char *vgname)
> + if ((vgname2 = _compare_lock_name(n, vgname))) {
> + log_errno(EDEADLK, "Invalid vgname lock order "
> + "attempted with %s - %s already locked",
> + vgname, vgname2);
Internal error: VG lock %s must be requested before %s, not after.
> --- a/lib/locking/locking.c
> +++ b/lib/locking/locking.c
> @@ -387,6 +387,12 @@ int lock_vol(struct cmd_context *cmd, const char *vol, uint32_t flags)
> + if (vol[0] != '#' &&
> + ((flags & LCK_TYPE_MASK) != LCK_UNLOCK) &&
> + (!(flags & LCK_CACHE)) &&
> + !lvmcache_verify_lock_order(vol))
> + return 0;
return_0;
Alasdair
More information about the lvm-devel
mailing list