From 92f89eb8570cc512a7aba9fa3b072e41535e9d7c Mon Sep 17 00:00:00 2001 From: nikita Date: Wed, 15 Nov 2006 22:05:15 +0000 Subject: [PATCH] dynlocks: add dynlock_is_locked() function. --- .../patches/dynamic-locks-2.6.9.patch | 30 ++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/lustre/kernel_patches/patches/dynamic-locks-2.6.9.patch b/lustre/kernel_patches/patches/dynamic-locks-2.6.9.patch index 14e4f05..e5889b7 100644 --- a/lustre/kernel_patches/patches/dynamic-locks-2.6.9.patch +++ b/lustre/kernel_patches/patches/dynamic-locks-2.6.9.patch @@ -27,7 +27,7 @@ Index: linux/include/linux/dynlocks.h =================================================================== --- linux.orig/include/linux/dynlocks.h +++ linux/include/linux/dynlocks.h -@@ -0,0 +1,36 @@ +@@ -0,0 +1,37 @@ +#ifndef _LINUX_DYNLOCKS_H +#define _LINUX_DYNLOCKS_H + @@ -62,6 +62,7 @@ Index: linux/include/linux/dynlocks.h + enum dynlock_type lt, int gfp); +void dynlock_unlock(struct dynlock *dl, struct dynlock_handle *lock); + ++int dynlock_is_locked(struct dynlock *dl, unsigned long value); +#endif + Index: linux/lib/Makefile @@ -81,7 +82,7 @@ Index: linux/lib/dynlocks.c =================================================================== --- linux.orig/lib/dynlocks.c +++ linux/lib/dynlocks.c -@@ -0,0 +1,201 @@ +@@ -0,0 +1,226 @@ +/* + * Dynamic Locks + * @@ -279,7 +280,32 @@ Index: linux/lib/dynlocks.c + spin_unlock(&dl->dl_list_lock); +} + ++int dynlock_is_locked(struct dynlock *dl, unsigned long value) ++{ ++ struct dynlock_handle *hl; ++ int result; ++ ++ result = 0; ++ /* find requested lock in lockspace */ ++ spin_lock(&dl->dl_list_lock); ++ BUG_ON(dl->dl_list.next == NULL); ++ BUG_ON(dl->dl_list.prev == NULL); ++ list_for_each_entry(hl, &dl->dl_list, dl_list) { ++ BUG_ON(hl->dl_list.next == NULL); ++ BUG_ON(hl->dl_list.prev == NULL); ++ BUG_ON(hl->dl_magic != DYNLOCK_MAGIC); ++ if (hl->dl_value == value && hl->dl_pid == current->pid) { ++ /* lock is found */ ++ result = 1; ++ break; ++ } ++ } ++ spin_unlock(&dl->dl_list_lock); ++ return result; ++} ++ +EXPORT_SYMBOL(dynlock_init); +EXPORT_SYMBOL(dynlock_lock); +EXPORT_SYMBOL(dynlock_unlock); ++EXPORT_SYMBOL(dynlock_is_locked); + -- 1.8.3.1