X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fldlm%2Fldlm_internal.h;h=8f7cb5c0bba3c4586c400153bcefd2ef44391d74;hb=e3a7c58aebafce40323db54bf6056029e5af4a70;hp=12ff5ce20e8e4ee1cb1f901076fdcf51bb913359;hpb=51074e76259ac428a7e7a7ac3f189971bf20122f;p=fs%2Flustre-release.git diff --git a/lustre/ldlm/ldlm_internal.h b/lustre/ldlm/ldlm_internal.h index 12ff5ce..8f7cb5c 100644 --- a/lustre/ldlm/ldlm_internal.h +++ b/lustre/ldlm/ldlm_internal.h @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -29,8 +27,7 @@ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011 Whamcloud, Inc. - * + * Copyright (c) 2011, 2012, Whamcloud, Inc. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -41,17 +38,11 @@ extern cfs_atomic_t ldlm_srv_namespace_nr; extern cfs_atomic_t ldlm_cli_namespace_nr; -extern cfs_semaphore_t ldlm_srv_namespace_lock; +extern cfs_mutex_t ldlm_srv_namespace_lock; extern cfs_list_t ldlm_srv_namespace_list; -extern cfs_semaphore_t ldlm_cli_namespace_lock; +extern cfs_mutex_t ldlm_cli_namespace_lock; extern cfs_list_t ldlm_cli_namespace_list; -static inline int ldlm_res_eq(const struct ldlm_res_id *res0, - const struct ldlm_res_id *res1) -{ - return !memcmp(res0, res1, sizeof(*res0)); -} - static inline cfs_atomic_t *ldlm_namespace_nr(ldlm_side_t client) { return client == LDLM_NAMESPACE_SERVER ? @@ -64,7 +55,7 @@ static inline cfs_list_t *ldlm_namespace_list(ldlm_side_t client) &ldlm_srv_namespace_list : &ldlm_cli_namespace_list; } -static inline cfs_semaphore_t *ldlm_namespace_lock(ldlm_side_t client) +static inline cfs_mutex_t *ldlm_namespace_lock(ldlm_side_t client) { return client == LDLM_NAMESPACE_SERVER ? &ldlm_srv_namespace_lock : &ldlm_cli_namespace_lock; @@ -104,12 +95,23 @@ void ldlm_namespace_free_post(struct ldlm_namespace *ns); /* ldlm_lock.c */ struct ldlm_cb_set_arg { - struct ptlrpc_request_set *set; - cfs_atomic_t restart; - int type; /* LDLM_BL_CALLBACK or LDLM_CP_CALLBACK */ - int rpcs; /* # of rpcs in set */ + int type; /* LDLM_BL_CALLBACK or LDLM_CP_CALLBACK */ + unsigned int threshold; /* threshold to wake up the waiting proc */ + cfs_atomic_t rpcs; /* # of inflight rpcs in set */ + cfs_atomic_t restart; + cfs_atomic_t refcount; + cfs_waitq_t waitq; }; +static inline void ldlm_csa_put(struct ldlm_cb_set_arg *arg) +{ + if (cfs_atomic_dec_and_test(&arg->refcount)) { + LASSERT(cfs_atomic_read(&arg->rpcs) == 0); + + OBD_FREE_PTR(arg); + } +} + typedef enum { LDLM_WORK_BL_AST, LDLM_WORK_CP_AST, @@ -130,8 +132,10 @@ void ldlm_lock_decref_internal(struct ldlm_lock *, __u32 mode); void ldlm_lock_decref_internal_nolock(struct ldlm_lock *, __u32 mode); void ldlm_add_ast_work_item(struct ldlm_lock *lock, struct ldlm_lock *new, cfs_list_t *work_list); +#ifdef HAVE_SERVER_SUPPORT int ldlm_reprocess_queue(struct ldlm_resource *res, cfs_list_t *queue, cfs_list_t *work_list); +#endif int ldlm_run_ast_work(struct ldlm_namespace *ns, cfs_list_t *rpc_list, ldlm_desc_ast_t ast_type); int ldlm_lock_remove_from_lru(struct ldlm_lock *lock); @@ -152,13 +156,22 @@ int ldlm_bl_to_thread_list(struct ldlm_namespace *ns, struct ldlm_lock_desc *ld, void ldlm_handle_bl_callback(struct ldlm_namespace *ns, struct ldlm_lock_desc *ld, struct ldlm_lock *lock); +#ifdef HAVE_SERVER_SUPPORT /* ldlm_plain.c */ int ldlm_process_plain_lock(struct ldlm_lock *lock, int *flags, int first_enq, ldlm_error_t *err, cfs_list_t *work_list); +/* ldlm_inodebits.c */ +int ldlm_process_inodebits_lock(struct ldlm_lock *lock, int *flags, + int first_enq, ldlm_error_t *err, + cfs_list_t *work_list); +#endif + /* ldlm_extent.c */ +#ifdef HAVE_SERVER_SUPPORT int ldlm_process_extent_lock(struct ldlm_lock *lock, int *flags, int first_enq, ldlm_error_t *err, cfs_list_t *work_list); +#endif void ldlm_extent_add_lock(struct ldlm_resource *res, struct ldlm_lock *lock); void ldlm_extent_unlink_lock(struct ldlm_lock *lock); @@ -166,11 +179,6 @@ void ldlm_extent_unlink_lock(struct ldlm_lock *lock); int ldlm_process_flock_lock(struct ldlm_lock *req, int *flags, int first_enq, ldlm_error_t *err, cfs_list_t *work_list); -/* ldlm_inodebits.c */ -int ldlm_process_inodebits_lock(struct ldlm_lock *lock, int *flags, - int first_enq, ldlm_error_t *err, - cfs_list_t *work_list); - /* l_lock.c */ void l_check_ns_lock(struct ldlm_namespace *ns); void l_check_no_ns_lock(struct ldlm_namespace *ns); @@ -284,7 +292,10 @@ void ldlm_extent_policy_wire_to_local(const ldlm_wire_policy_data_t *wpolicy, ldlm_policy_data_t *lpolicy); void ldlm_extent_policy_local_to_wire(const ldlm_policy_data_t *lpolicy, ldlm_wire_policy_data_t *wpolicy); -void ldlm_flock_policy_wire_to_local(const ldlm_wire_policy_data_t *wpolicy, +void ldlm_flock_policy_wire18_to_local(const ldlm_wire_policy_data_t *wpolicy, ldlm_policy_data_t *lpolicy); +void ldlm_flock_policy_wire21_to_local(const ldlm_wire_policy_data_t *wpolicy, + ldlm_policy_data_t *lpolicy); + void ldlm_flock_policy_local_to_wire(const ldlm_policy_data_t *lpolicy, ldlm_wire_policy_data_t *wpolicy);