*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
*
* GPL HEADER END
*/
/*
* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright (c) 2012, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
*/
#define DEBUG_SUBSYSTEM S_LDLM
-#ifdef __KERNEL__
#include <libcfs/libcfs.h>
-#else
-#include <liblustre.h>
-#endif
#include <lustre_dlm.h>
#include <lustre_lib.h>
-/*
- * ldlm locking uses resource to serialize access to locks
+/**
+ * Lock a lock and its resource.
+ *
+ * LDLM locking uses resource to serialize access to locks
* but there is a case when we change resource of lock upon
- * enqueue reply. we rely on that lock->l_resource = new_res
- * is atomic
+ * enqueue reply. We rely on lock->l_resource = new_res
+ * being an atomic operation.
*/
-struct ldlm_resource * lock_res_and_lock(struct ldlm_lock *lock)
+struct ldlm_resource *lock_res_and_lock(struct ldlm_lock *lock)
{
/* on server-side resource of lock doesn't change */
- if (!lock->l_ns_srv)
- cfs_spin_lock(&lock->l_lock);
+ if (!ldlm_is_ns_srv(lock))
+ spin_lock(&lock->l_lock);
lock_res(lock->l_resource);
- lock->l_res_locked = 1;
+ ldlm_set_res_locked(lock);
return lock->l_resource;
}
+EXPORT_SYMBOL(lock_res_and_lock);
+/**
+ * Unlock a lock and its resource previously locked with lock_res_and_lock
+ */
void unlock_res_and_lock(struct ldlm_lock *lock)
{
/* on server-side resource of lock doesn't change */
- lock->l_res_locked = 0;
+ ldlm_clear_res_locked(lock);
unlock_res(lock->l_resource);
- if (!lock->l_ns_srv)
- cfs_spin_unlock(&lock->l_lock);
+ if (!ldlm_is_ns_srv(lock))
+ spin_unlock(&lock->l_lock);
}
+EXPORT_SYMBOL(unlock_res_and_lock);