Whamcloud - gitweb
b=619803
authorpschwan <pschwan>
Wed, 9 Oct 2002 19:49:41 +0000 (19:49 +0000)
committerpschwan <pschwan>
Wed, 9 Oct 2002 19:49:41 +0000 (19:49 +0000)
Unset cookie when freeing lock, check cookie before deref in handle2lock

lustre/ldlm/ldlm_lock.c

index db2cf23..295abfe 100644 (file)
@@ -165,6 +165,7 @@ void ldlm_lock_put(struct ldlm_lock *lock)
                 spin_unlock(&ns->ns_counter_lock);
 
                 lock->l_resource = NULL;
+                lock->l_random = 0xdeadbeefcafebabe;
                 if (lock->l_export && lock->l_export->exp_connection)
                         ptlrpc_put_connection(lock->l_export->exp_connection);
                 kmem_cache_free(ldlm_lock_slab, lock);
@@ -331,6 +332,11 @@ struct ldlm_lock *ldlm_handle2lock(struct lustre_handle *handle)
                 GOTO(out2, retval);
         }
 
+        if (lock->l_random != handle->cookie) {
+                CERROR("bogus cookie: lock "LPX64", handle "LPX64"\n",
+                       lock->l_random, handle->cookie);
+                GOTO(out, NULL);
+        }
         if (!lock->l_resource) {
                 CERROR("trying to lock bogus resource: lock %p\n", lock);
                 LDLM_DEBUG(lock, "ldlm_handle2lock(%p)", lock);
@@ -341,11 +347,6 @@ struct ldlm_lock *ldlm_handle2lock(struct lustre_handle *handle)
                 LDLM_DEBUG(lock, "ldlm_handle2lock(%p)", lock);
                 GOTO(out2, retval);
         }
-        if (lock->l_random != handle->cookie) {
-                CERROR("bogus cookie: lock "LPX64", handle "LPX64"\n",
-                       lock->l_random, handle->cookie);
-                GOTO(out, NULL);
-        }
 
         l_lock(&lock->l_resource->lr_namespace->ns_lock);
         if (lock->l_flags & LDLM_FL_DESTROYED) {