ldlm_resource_putref(lock->l_resource);
lock->l_resource = NULL;
+ if (lock->l_export)
+ class_export_put(lock->l_export);
if (lock->l_parent)
LDLM_LOCK_PUT(lock->l_parent);
/* Wake anyone waiting for this lock */
/* FIXME: I should probably add yet another flag, instead of using
* l_export to only call this on clients */
+ if (lock->l_export)
+ class_export_put(lock->l_export);
lock->l_export = NULL;
if (lock->l_export && lock->l_completion_ast)
lock->l_completion_ast(lock, 0);
}
list_add_tail(&lock->l_pending_chain, &waiting_locks_list); /* FIFO */
spin_unlock_bh(&waiting_locks_spinlock);
- /* We drop this ref when we get removed from the list. */
- class_export_get(lock->l_export);
return 1;
}
}
list_del_init(&lock->l_pending_chain);
spin_unlock_bh(&waiting_locks_spinlock);
- /* We got this ref when we were added to the list. */
- class_export_put(lock->l_export);
LDLM_DEBUG(lock, "removed");
return 1;
}
LDLM_DEBUG(lock, "server-side enqueue handler, new lock created");
LASSERT(req->rq_export);
- lock->l_export = req->rq_export;
+ lock->l_export = class_export_get(req->rq_export);
l_lock(&lock->l_resource->lr_namespace->ns_lock);
list_add(&lock->l_export_chain,
&lock->l_export->exp_ldlm_data.led_held_locks);