Hi What's the purpose of two-level uuid-locking? I.e. you call lockspace_handle = dm_cluster_lock_init(char *uuid1) and then dm_cluster_lock_by_str(void *lockspace_handle, char *uuid2, ...) Why not use just one uuid? Also think that locking will be heavily repeated (at least on a single node), so it is needed to make lock as fast as possible --- without any string operations, hashing, searching, associated spinlocks. I'd propose to change the interface to lockspace_handle = dm_cluster_lock_init(char *uuid) dm_cluster_lock_by_str(void *lockspace_handle, ...) --- assume that "uuid" already uniquely identifies the snapshot --- and that second uuid is unnecessary. You can then get rid of "find_dcl" function and its complexities (spinlock, list walking, strlen, strcmp) --- so that they won't be executed on the fast path --- and lockspace_handle could be a single pointer to struct dm_cluster_lock. Mikulas -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel