+ RETURN(ELDLM_OK);
+}
+
+void ldlm_namespace_get_nolock(struct ldlm_namespace *ns)
+{
+ LASSERT(ns->ns_refcount >= 0);
+ ns->ns_refcount++;
+}
+
+void ldlm_namespace_get(struct ldlm_namespace *ns)
+{
+ spin_lock(&ns->ns_hash_lock);
+ ldlm_namespace_get_nolock(ns);
+ spin_unlock(&ns->ns_hash_lock);
+}
+
+void ldlm_namespace_put_nolock(struct ldlm_namespace *ns, int wakeup)
+{
+ LASSERT(ns->ns_refcount > 0);
+ ns->ns_refcount--;
+ if (ns->ns_refcount == 0 && wakeup)
+ wake_up(&ns->ns_waitq);
+}
+
+void ldlm_namespace_put(struct ldlm_namespace *ns, int wakeup)
+{
+ spin_lock(&ns->ns_hash_lock);
+ ldlm_namespace_put_nolock(ns, wakeup);
+ spin_unlock(&ns->ns_hash_lock);
+}
+
+/* Should be called under ldlm_namespace_lock(client) taken */
+void ldlm_namespace_move(struct ldlm_namespace *ns, ldlm_side_t client)
+{
+ LASSERT(!list_empty(&ns->ns_list_chain));
+ LASSERT_SEM_LOCKED(ldlm_namespace_lock(client));
+ list_move_tail(&ns->ns_list_chain, ldlm_namespace_list(client));