/* update lvbo to return proper attributes.
* see bug 23174 */
ldlm_resource_getref(res);
- ldlm_res_lvbo_update(res, NULL, 1);
+ ldlm_lvbo_update(res, lock, NULL, 1);
ldlm_resource_putref(res);
}
ldlm_lock_cancel(lock);
} else if (rc == -ELDLM_NO_LOCK_DATA) {
LDLM_DEBUG(lock, "lost race - client has a lock but no "
"inode");
- ldlm_res_lvbo_update(lock->l_resource, NULL, 1);
+ ldlm_lvbo_update(lock->l_resource, lock, NULL, 1);
} else if (rc != 0) {
rc = ldlm_handle_ast_error(lock, req, rc, "glimpse");
} else {
- rc = ldlm_res_lvbo_update(lock->l_resource, req, 1);
+ rc = ldlm_lvbo_update(lock->l_resource, lock, req, 1);
}
break;
case LDLM_BL_CALLBACK:
RETURN(rc);
}
+EXPORT_SYMBOL(ldlm_server_glimpse_ast);
int ldlm_glimpse_locks(struct ldlm_resource *res,
struct list_head *gl_work_list)
}
EXPORT_SYMBOL(ldlm_request_lock);
-static void ldlm_svc_get_eopc(const struct ldlm_request *dlm_req,
- struct lprocfs_stats *srv_stats)
-{
- int lock_type = 0, op = 0;
-
- lock_type = dlm_req->lock_desc.l_resource.lr_type;
-
- switch (lock_type) {
- case LDLM_PLAIN:
- op = PTLRPC_LAST_CNTR + LDLM_PLAIN_ENQUEUE;
- break;
- case LDLM_EXTENT:
- if (dlm_req->lock_flags & LDLM_FL_HAS_INTENT)
- op = PTLRPC_LAST_CNTR + LDLM_GLIMPSE_ENQUEUE;
- else
- op = PTLRPC_LAST_CNTR + LDLM_EXTENT_ENQUEUE;
- break;
- case LDLM_FLOCK:
- op = PTLRPC_LAST_CNTR + LDLM_FLOCK_ENQUEUE;
- break;
- case LDLM_IBITS:
- op = PTLRPC_LAST_CNTR + LDLM_IBITS_ENQUEUE;
- break;
- default:
- op = 0;
- break;
- }
-
- if (op)
- lprocfs_counter_incr(srv_stats, op);
-
- return;
-}
-
/**
* Main server-side entry point into LDLM for enqueue. This is called by ptlrpc
* service threads to carry out client lock enqueueing requests.
LASSERT(req->rq_export);
- if (ptlrpc_req2svc(req)->srv_stats != NULL)
+ /* for intent enqueue the stat will be updated inside intent policy */
+ if (ptlrpc_req2svc(req)->srv_stats != NULL &&
+ !(dlm_req->lock_flags & LDLM_FL_HAS_INTENT))
ldlm_svc_get_eopc(dlm_req, ptlrpc_req2svc(req)->srv_stats);
if (req->rq_export && req->rq_export->exp_nid_stats &&
lock->l_req_extent = lock->l_policy_data.l_extent;
existing_lock:
-
if (flags & LDLM_FL_HAS_INTENT) {
/* In this case, the reply buffer is allocated deep in
* local_lock_enqueue by the policy function. */
if (res != NULL) {
ldlm_resource_getref(res);
LDLM_RESOURCE_ADDREF(res);
- ldlm_res_lvbo_update(res, NULL, 1);
+
+ if (!ldlm_is_discard_data(lock))
+ ldlm_lvbo_update(res, lock, NULL, 1);
}
pres = res;
}
if (ldlm_interval_tree_slab == NULL)
goto out_interval;
+#ifdef HAVE_SERVER_SUPPORT
+ ldlm_glimpse_work_kmem = kmem_cache_create("ldlm_glimpse_work_kmem",
+ sizeof(struct ldlm_glimpse_work),
+ 0, 0, NULL);
+ if (ldlm_glimpse_work_kmem == NULL)
+ goto out_interval_tree;
+#endif
+
#if LUSTRE_TRACKS_LOCK_EXP_REFS
class_export_dump_hook = ldlm_dump_export_locks;
#endif
return 0;
-
+#ifdef HAVE_SERVER_SUPPORT
+out_interval_tree:
+ kmem_cache_destroy(ldlm_interval_tree_slab);
+#endif
out_interval:
kmem_cache_destroy(ldlm_interval_slab);
out_lock:
kmem_cache_destroy(ldlm_lock_slab);
kmem_cache_destroy(ldlm_interval_slab);
kmem_cache_destroy(ldlm_interval_tree_slab);
+#ifdef HAVE_SERVER_SUPPORT
+ kmem_cache_destroy(ldlm_glimpse_work_kmem);
+#endif
}