Whamcloud - gitweb
b=22244 fix ref count issue
authorJohann Lombardi <johann@sun.com>
Fri, 28 May 2010 21:10:36 +0000 (23:10 +0200)
committerJohann Lombardi <johann@sun.com>
Fri, 28 May 2010 21:10:36 +0000 (23:10 +0200)
lustre/ldlm/ldlm_lockd.c

index 56a8421..b582c66 100644 (file)
@@ -1629,14 +1629,10 @@ static int __ldlm_bl_to_thread(struct ldlm_namespace *ns, struct ldlm_bl_work_it
         }
         spin_unlock(&blp->blp_lock);
 
-        if (mode == LDLM_SYNC) {
-                /* keep ref count as object is on this stack for SYNC call */
-                ldlm_bl_work_item_get(blwi);
-                cfs_waitq_signal(&blp->blp_waitq);
+        cfs_waitq_signal(&blp->blp_waitq);
+
+        if (mode == LDLM_SYNC)
                 wait_for_completion(&blwi->blwi_comp);
-        } else {
-                cfs_waitq_signal(&blp->blp_waitq);
-        }
 
         RETURN(0);
 }
@@ -1653,7 +1649,8 @@ static int ldlm_bl_to_thread(struct ldlm_namespace *ns,
                  */
                 struct ldlm_bl_work_item blwi;
                 memset(&blwi, 0, sizeof(blwi));
-                /* have extra ref as this obj is on stack */
+                /* take extra ref as this obj is on stack */
+                ldlm_bl_work_item_get(&blwi);
                 RETURN(__ldlm_bl_to_thread(ns, &blwi, ld, lock, cancels, count, mode));
         } else {
                 struct ldlm_bl_work_item *blwi;