Whamcloud - gitweb
LU-1188 clio: acquire lockdep for cl_lock_peek()
authorJinshan Xiong <jinshan.xiong@whamcloud.com>
Fri, 30 Mar 2012 21:16:14 +0000 (14:16 -0700)
committerOleg Drokin <green@whamcloud.com>
Tue, 22 May 2012 04:32:26 +0000 (00:32 -0400)
Otherwise it will break lock dependencies check.

Signed-off-by: Jinshan Xiong <jinshan.xiong@whamcloud.com>
Change-Id: Icc9e3f881d8c5d0c6a9575638d23cff38948724f
Reviewed-on: http://review.whamcloud.com/2422
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Alexey Lyashkov <alexey_lyashkov@xyratex.com>
lustre/obdclass/cl_lock.c

index 2646e4c..d3a0bbd 100644 (file)
@@ -592,7 +592,6 @@ struct cl_lock *cl_lock_peek(const struct lu_env *env, const struct cl_io *io,
         struct cl_object_header *head;
         struct cl_object        *obj;
         struct cl_lock          *lock;
-        int ok;
 
         obj  = need->cld_obj;
         head = cl_object_header(obj);
@@ -613,14 +612,14 @@ struct cl_lock *cl_lock_peek(const struct lu_env *env, const struct cl_io *io,
                 if (result < 0)
                         cl_lock_error(env, lock, result);
         }
-        ok = lock->cll_state == CLS_HELD;
-        if (ok) {
+        if (lock->cll_state == CLS_HELD) {
                 cl_lock_hold_add(env, lock, scope, source);
                 cl_lock_user_add(env, lock);
+                cl_lock_mutex_put(env, lock);
+                cl_lock_lockdep_acquire(env, lock, 0);
                 cl_lock_put(env, lock);
-        }
-        cl_lock_mutex_put(env, lock);
-        if (!ok) {
+        } else {
+                cl_lock_mutex_put(env, lock);
                 cl_lock_put(env, lock);
                 lock = NULL;
         }