Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-12616 obclass: fix MDS start/stop race
[fs/lustre-release.git]
/
lustre
/
ldlm
/
ldlm_internal.h
diff --git
a/lustre/ldlm/ldlm_internal.h
b/lustre/ldlm/ldlm_internal.h
index
8ef4709
..
0b79fe5
100644
(file)
--- a/
lustre/ldlm/ldlm_internal.h
+++ b/
lustre/ldlm/ldlm_internal.h
@@
-23,15
+23,13
@@
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 201
5
, Intel Corporation.
+ * Copyright (c) 2011, 201
7
, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
* Lustre is a trademark of Sun Microsystems, Inc.
*/
*/
/*
* This file is part of Lustre, http://www.lustre.org/
* Lustre is a trademark of Sun Microsystems, Inc.
*/
-#define MAX_STRING_SIZE 128
-
extern int ldlm_srv_namespace_nr;
extern int ldlm_cli_namespace_nr;
extern struct mutex ldlm_srv_namespace_lock;
extern int ldlm_srv_namespace_nr;
extern int ldlm_cli_namespace_nr;
extern struct mutex ldlm_srv_namespace_lock;
@@
-40,6
+38,7
@@
extern struct mutex ldlm_cli_namespace_lock;
extern struct list_head ldlm_cli_active_namespace_list;
extern struct list_head ldlm_cli_inactive_namespace_list;
extern unsigned int ldlm_cancel_unused_locks_before_replay;
extern struct list_head ldlm_cli_active_namespace_list;
extern struct list_head ldlm_cli_inactive_namespace_list;
extern unsigned int ldlm_cancel_unused_locks_before_replay;
+extern struct kmem_cache *ldlm_glimpse_work_kmem;
static inline int ldlm_namespace_nr_read(enum ldlm_side client)
{
static inline int ldlm_namespace_nr_read(enum ldlm_side client)
{
@@
-121,6
+120,7
@@
extern unsigned int ldlm_enqueue_min;
/* ldlm_resource.c */
extern struct kmem_cache *ldlm_resource_slab;
extern struct kmem_cache *ldlm_lock_slab;
/* ldlm_resource.c */
extern struct kmem_cache *ldlm_resource_slab;
extern struct kmem_cache *ldlm_lock_slab;
+extern struct kmem_cache *ldlm_inodebits_slab;
extern struct kmem_cache *ldlm_interval_tree_slab;
void ldlm_resource_insert_lock_after(struct ldlm_lock *original,
extern struct kmem_cache *ldlm_interval_tree_slab;
void ldlm_resource_insert_lock_after(struct ldlm_lock *original,
@@
-135,6
+135,7
@@
typedef enum {
LDLM_WORK_GL_AST
} ldlm_desc_ast_t;
LDLM_WORK_GL_AST
} ldlm_desc_ast_t;
+void ldlm_grant_lock_with_skiplist(struct ldlm_lock *lock);
void ldlm_grant_lock(struct ldlm_lock *lock, struct list_head *work_list);
int ldlm_fill_lvb(struct ldlm_lock *lock, struct req_capsule *pill,
enum req_location loc, void *data, int size);
void ldlm_grant_lock(struct ldlm_lock *lock, struct list_head *work_list);
int ldlm_fill_lvb(struct ldlm_lock *lock, struct req_capsule *pill,
enum req_location loc, void *data, int size);
@@
-143,7
+144,9
@@
ldlm_lock_create(struct ldlm_namespace *ns, const struct ldlm_res_id *,
enum ldlm_type type, enum ldlm_mode mode,
const struct ldlm_callback_suite *cbs,
void *data, __u32 lvb_len, enum lvb_type lvb_type);
enum ldlm_type type, enum ldlm_mode mode,
const struct ldlm_callback_suite *cbs,
void *data, __u32 lvb_len, enum lvb_type lvb_type);
-enum ldlm_error ldlm_lock_enqueue(struct ldlm_namespace *, struct ldlm_lock **,
+enum ldlm_error ldlm_lock_enqueue(const struct lu_env *env,
+ struct ldlm_namespace *,
+ struct ldlm_lock **,
void *cookie, __u64 *flags);
void ldlm_lock_addref_internal(struct ldlm_lock *, enum ldlm_mode mode);
void ldlm_lock_addref_internal_nolock(struct ldlm_lock *, enum ldlm_mode mode);
void *cookie, __u64 *flags);
void ldlm_lock_addref_internal(struct ldlm_lock *, enum ldlm_mode mode);
void ldlm_lock_addref_internal_nolock(struct ldlm_lock *, enum ldlm_mode mode);
@@
-154,13
+157,16
@@
void ldlm_add_ast_work_item(struct ldlm_lock *lock, struct ldlm_lock *new,
#ifdef HAVE_SERVER_SUPPORT
int ldlm_reprocess_queue(struct ldlm_resource *res, struct list_head *queue,
struct list_head *work_list,
#ifdef HAVE_SERVER_SUPPORT
int ldlm_reprocess_queue(struct ldlm_resource *res, struct list_head *queue,
struct list_head *work_list,
- enum ldlm_process_intention intention);
+ enum ldlm_process_intention intention,
+ struct ldlm_lock *hint);
int ldlm_handle_conflict_lock(struct ldlm_lock *lock, __u64 *flags,
int ldlm_handle_conflict_lock(struct ldlm_lock *lock, __u64 *flags,
- struct list_head *rpc_list
, __u64 grant_flags
);
+ struct list_head *rpc_list);
void ldlm_discard_bl_list(struct list_head *bl_list);
void ldlm_discard_bl_list(struct list_head *bl_list);
+void ldlm_clear_blocking_lock(struct ldlm_lock *lock);
+void ldlm_clear_blocking_data(struct ldlm_lock *lock);
#endif
int ldlm_run_ast_work(struct ldlm_namespace *ns, struct list_head *rpc_list,
#endif
int ldlm_run_ast_work(struct ldlm_namespace *ns, struct list_head *rpc_list,
-
ldlm_desc_ast_t ast_type);
+ ldlm_desc_ast_t ast_type);
int ldlm_work_gl_ast_lock(struct ptlrpc_request_set *rqset, void *opaq);
int ldlm_lock_remove_from_lru_check(struct ldlm_lock *lock, ktime_t last_use);
#define ldlm_lock_remove_from_lru(lock) \
int ldlm_work_gl_ast_lock(struct ptlrpc_request_set *rqset, void *opaq);
int ldlm_lock_remove_from_lru_check(struct ldlm_lock *lock, ktime_t last_use);
#define ldlm_lock_remove_from_lru(lock) \
@@
-173,6
+179,7
@@
void ldlm_lock_destroy_nolock(struct ldlm_lock *lock);
int ldlm_export_cancel_blocked_locks(struct obd_export *exp);
int ldlm_export_cancel_locks(struct obd_export *exp);
int ldlm_export_cancel_blocked_locks(struct obd_export *exp);
int ldlm_export_cancel_locks(struct obd_export *exp);
+void ldlm_grant_lock_with_skiplist(struct ldlm_lock *lock);
/* ldlm_lockd.c */
int ldlm_bl_to_thread_lock(struct ldlm_namespace *ns, struct ldlm_lock_desc *ld,
/* ldlm_lockd.c */
int ldlm_bl_to_thread_lock(struct ldlm_namespace *ns, struct ldlm_lock_desc *ld,
@@
-197,14
+204,25
@@
int ldlm_process_inodebits_lock(struct ldlm_lock *lock, __u64 *flags,
enum ldlm_process_intention intention,
enum ldlm_error *err,
struct list_head *work_list);
enum ldlm_process_intention intention,
enum ldlm_error *err,
struct list_head *work_list);
+int ldlm_reprocess_inodebits_queue(struct ldlm_resource *res,
+ struct list_head *queue,
+ struct list_head *work_list,
+ enum ldlm_process_intention intention,
+ struct ldlm_lock *hint);
/* ldlm_extent.c */
int ldlm_process_extent_lock(struct ldlm_lock *lock, __u64 *flags,
enum ldlm_process_intention intention,
enum ldlm_error *err, struct list_head *work_list);
#endif
/* ldlm_extent.c */
int ldlm_process_extent_lock(struct ldlm_lock *lock, __u64 *flags,
enum ldlm_process_intention intention,
enum ldlm_error *err, struct list_head *work_list);
#endif
+int ldlm_extent_alloc_lock(struct ldlm_lock *lock);
void ldlm_extent_add_lock(struct ldlm_resource *res, struct ldlm_lock *lock);
void ldlm_extent_unlink_lock(struct ldlm_lock *lock);
void ldlm_extent_add_lock(struct ldlm_resource *res, struct ldlm_lock *lock);
void ldlm_extent_unlink_lock(struct ldlm_lock *lock);
+int ldlm_inodebits_alloc_lock(struct ldlm_lock *lock);
+void ldlm_inodebits_add_lock(struct ldlm_resource *res, struct list_head *head,
+ struct ldlm_lock *lock);
+void ldlm_inodebits_unlink_lock(struct ldlm_lock *lock);
+
/* ldlm_flock.c */
int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
enum ldlm_process_intention intention,
/* ldlm_flock.c */
int ldlm_process_flock_lock(struct ldlm_lock *req, __u64 *flags,
enum ldlm_process_intention intention,
@@
-216,7
+234,7
@@
void ldlm_destroy_flock_export(struct obd_export *exp);
void l_check_ns_lock(struct ldlm_namespace *ns);
void l_check_no_ns_lock(struct ldlm_namespace *ns);
void l_check_ns_lock(struct ldlm_namespace *ns);
void l_check_no_ns_lock(struct ldlm_namespace *ns);
-extern struct
proc_dir_entry *ldlm_svc_proc
_dir;
+extern struct
dentry *ldlm_svc_debugfs
_dir;
struct ldlm_state {
struct ptlrpc_service *ldlm_cb_service;
struct ldlm_state {
struct ptlrpc_service *ldlm_cb_service;
@@
-230,7
+248,6
@@
struct ldlm_state {
extern struct kmem_cache *ldlm_interval_slab; /* slab cache for ldlm_interval */
extern void ldlm_interval_attach(struct ldlm_interval *n, struct ldlm_lock *l);
extern struct ldlm_interval *ldlm_interval_detach(struct ldlm_lock *l);
extern struct kmem_cache *ldlm_interval_slab; /* slab cache for ldlm_interval */
extern void ldlm_interval_attach(struct ldlm_interval *n, struct ldlm_lock *l);
extern struct ldlm_interval *ldlm_interval_detach(struct ldlm_lock *l);
-extern struct ldlm_interval *ldlm_interval_alloc(struct ldlm_lock *lock);
extern void ldlm_interval_free(struct ldlm_interval *node);
/* this function must be called with res lock held */
static inline struct ldlm_extent *
extern void ldlm_interval_free(struct ldlm_interval *node);
/* this function must be called with res lock held */
static inline struct ldlm_extent *
@@
-281,7
+298,7
@@
enum ldlm_policy_res {
static ssize_t var##_store(struct kobject *kobj, \
struct attribute *attr, \
const char *buffer, \
static ssize_t var##_store(struct kobject *kobj, \
struct attribute *attr, \
const char *buffer, \
-
unsigned long count)
\
+
size_t count)
\
{ \
struct ldlm_pool *pl = container_of(kobj, struct ldlm_pool,\
pl_kobj); \
{ \
struct ldlm_pool *pl = container_of(kobj, struct ldlm_pool,\
pl_kobj); \
@@
-317,7
+334,7
@@
enum ldlm_policy_res {
static ssize_t var##_store(struct kobject *kobj, \
struct attribute *attr, \
const char *buffer, \
static ssize_t var##_store(struct kobject *kobj, \
struct attribute *attr, \
const char *buffer, \
-
unsigned long count)
\
+
size_t count)
\
{ \
struct ldlm_pool *pl = container_of(kobj, struct ldlm_pool,\
pl_kobj); \
{ \
struct ldlm_pool *pl = container_of(kobj, struct ldlm_pool,\
pl_kobj); \
@@
-336,28
+353,37
@@
enum ldlm_policy_res {
struct __##var##__dummy_write {; } /* semicolon catcher */
static inline void
struct __##var##__dummy_write {; } /* semicolon catcher */
static inline void
-ldlm_add_var(struct lprocfs_vars *vars, struct
proc_dir_entry *proc_dir
,
+ldlm_add_var(struct lprocfs_vars *vars, struct
dentry *debugfs_entry
,
const char *name, void *data, const struct file_operations *ops)
{
const char *name, void *data, const struct file_operations *ops)
{
-
snprintf((char *)vars->name, MAX_STRING_SIZE, "%s", name)
;
+
vars->name = name
;
vars->data = data;
vars->fops = ops;
vars->data = data;
vars->fops = ops;
- l
procfs_add_vars(proc_dir
, vars, NULL);
+ l
debugfs_add_vars(debugfs_entry
, vars, NULL);
}
static inline int is_granted_or_cancelled(struct ldlm_lock *lock)
{
}
static inline int is_granted_or_cancelled(struct ldlm_lock *lock)
{
- int ret = 0;
+ int ret = 0;
+
+ lock_res_and_lock(lock);
+ ret = is_granted_or_cancelled_nolock(lock);
+ unlock_res_and_lock(lock);
+
+ return ret;
+}
+
+static inline bool is_bl_done(struct ldlm_lock *lock)
+{
+ bool bl_done = true;
- lock_res_and_lock(lock);
- if ((lock->l_req_mode == lock->l_granted_mode) &&
- !ldlm_is_cp_reqd(lock))
- ret = 1;
- else if (ldlm_is_failed(lock) || ldlm_is_cancel(lock))
- ret = 1;
- unlock_res_and_lock(lock);
+ if (!ldlm_is_bl_done(lock)) {
+ lock_res_and_lock(lock);
+ bl_done = ldlm_is_bl_done(lock);
+ unlock_res_and_lock(lock);
+ }
-
return ret
;
+
return bl_done
;
}
typedef void (*ldlm_policy_wire_to_local_t)(const union ldlm_wire_policy_data *,
}
typedef void (*ldlm_policy_wire_to_local_t)(const union ldlm_wire_policy_data *,