Whamcloud - gitweb
osc_ldlm_glimpse_ast(): keep lock mutex over glimpse processing, for uniformity with...
authornikita <nikita>
Wed, 12 Nov 2008 11:16:25 +0000 (11:16 +0000)
committernikita <nikita>
Wed, 12 Nov 2008 11:16:25 +0000 (11:16 +0000)
lustre/osc/osc_lock.c

index 8fa1fdf..a0e3190 100644 (file)
@@ -814,6 +814,8 @@ static int osc_ldlm_glimpse_ast(struct ldlm_lock *dlmlock, void *data)
                  */
                 olck = osc_ast_data_get(dlmlock);
                 if (olck != NULL) {
                  */
                 olck = osc_ast_data_get(dlmlock);
                 if (olck != NULL) {
+                        lock = olck->ols_cl.cls_lock;
+                        cl_lock_mutex_get(env, lock);
                         cap = &req->rq_pill;
                         req_capsule_extend(cap, &RQF_LDLM_GL_CALLBACK);
                         req_capsule_set_size(cap, &RMF_DLM_LVB, RCL_SERVER,
                         cap = &req->rq_pill;
                         req_capsule_extend(cap, &RQF_LDLM_GL_CALLBACK);
                         req_capsule_set_size(cap, &RMF_DLM_LVB, RCL_SERVER,
@@ -821,10 +823,10 @@ static int osc_ldlm_glimpse_ast(struct ldlm_lock *dlmlock, void *data)
                         result = req_capsule_server_pack(cap);
                         if (result == 0) {
                                 lvb = req_capsule_server_get(cap, &RMF_DLM_LVB);
                         result = req_capsule_server_pack(cap);
                         if (result == 0) {
                                 lvb = req_capsule_server_get(cap, &RMF_DLM_LVB);
-                                lock = olck->ols_cl.cls_lock;
                                 obj = lock->cll_descr.cld_obj;
                                 result = cl_object_glimpse(env, obj, lvb);
                         }
                                 obj = lock->cll_descr.cld_obj;
                                 result = cl_object_glimpse(env, obj, lvb);
                         }
+                        cl_lock_mutex_put(env, lock);
                         osc_ast_data_put(env, olck);
                 } else {
                         /*
                         osc_ast_data_put(env, olck);
                 } else {
                         /*