}
spin_unlock(&blp->blp_lock);
- cfs_waitq_signal(&blp->blp_waitq);
-
- if (mode == LDLM_SYNC)
+ 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);
wait_for_completion(&blwi->blwi_comp);
+ } else {
+ cfs_waitq_signal(&blp->blp_waitq);
+ }
RETURN(0);
}
*/
struct ldlm_bl_work_item blwi;
memset(&blwi, 0, sizeof(blwi));
- /* take extra ref as this obj is on stack */
- ldlm_bl_work_item_get(&blwi);
+ /* have extra ref as this obj is on stack */
RETURN(__ldlm_bl_to_thread(ns, &blwi, ld, lock, cancels, count, mode));
} else {
struct ldlm_bl_work_item *blwi;