+static inline void ldlm_flock_blocking_link(struct ldlm_lock *req,
+ struct ldlm_lock *lock)
+{
+ /* For server only */
+ if (req->l_export == NULL)
+ return;
+
+ LASSERT(cfs_list_empty(&req->l_flock_waitq));
+ cfs_write_lock(&req->l_export->exp_flock_wait_lock);
+
+ req->l_policy_data.l_flock.blocking_owner =
+ lock->l_policy_data.l_flock.owner;
+ req->l_policy_data.l_flock.blocking_export =
+ class_export_get(lock->l_export);
+
+ cfs_list_add_tail(&req->l_flock_waitq,
+ &req->l_export->exp_flock_wait_list);
+ cfs_write_unlock(&req->l_export->exp_flock_wait_lock);
+}
+
+static inline void ldlm_flock_blocking_unlink(struct ldlm_lock *req)
+{
+ /* For server only */
+ if (req->l_export == NULL)
+ return;
+
+ cfs_write_lock(&req->l_export->exp_flock_wait_lock);
+ if (!cfs_list_empty(&req->l_flock_waitq)) {
+ cfs_list_del_init(&req->l_flock_waitq);
+
+ class_export_put(req->l_policy_data.l_flock.blocking_export);
+ req->l_policy_data.l_flock.blocking_owner = 0;
+ req->l_policy_data.l_flock.blocking_export = NULL;
+ }
+ cfs_write_unlock(&req->l_export->exp_flock_wait_lock);
+}
+