Whamcloud - gitweb
LU-17705 ptlrpc: replace synchronize_rcu() with rcu_barrier()
[fs/lustre-release.git] / lustre / mgc / mgc_internal.h
1 /*
2  * GPL HEADER START
3  *
4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 only,
8  * as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License version 2 for more details (a copy is included
14  * in the LICENSE file that accompanied this code).
15  *
16  * You should have received a copy of the GNU General Public License
17  * version 2 along with this program; If not, see
18  * http://www.gnu.org/licenses/gpl-2.0.html
19  *
20  * GPL HEADER END
21  */
22 /*
23  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
24  * Use is subject to license terms.
25  *
26  * Copyright (c) 2011, 2017, Intel Corporation.
27  */
28 /*
29  * This file is part of Lustre, http://www.lustre.org/
30  */
31
32 #ifndef _MGC_INTERNAL_H
33 #define _MGC_INTERNAL_H
34
35 #include <libcfs/libcfs.h>
36 #include <lustre_lib.h>
37 #include <lustre_dlm.h>
38 #include <lustre_log.h>
39 #include <lustre_export.h>
40 #ifdef HAVE_SERVER_SUPPORT
41 #include <lustre_nodemap.h>
42 #endif
43
44 int mgc_tunables_init(struct obd_device *obd);
45 int lprocfs_mgc_rd_ir_state(struct seq_file *m, void *data);
46
47 int mgc_process_log(struct obd_device *mgc, struct config_llog_data *cld);
48
49 /* this timeout represents how many seconds MGC should wait before
50  * requeue config and recover lock to the MGS. We need to randomize this
51  * in order to not flood the MGS.
52  */
53 #define MGC_TIMEOUT_MIN_SECONDS         5
54
55 extern unsigned int mgc_requeue_timeout_min;
56
57 static inline bool cld_is_sptlrpc(struct config_llog_data *cld)
58 {
59         return cld->cld_type == MGS_CFG_T_SPTLRPC;
60 }
61
62 static inline bool cld_is_recover(struct config_llog_data *cld)
63 {
64         return cld->cld_type == MGS_CFG_T_RECOVER;
65 }
66
67 static inline bool cld_is_nodemap(struct config_llog_data *cld)
68 {
69 #ifdef HAVE_SERVER_SUPPORT
70         return cld->cld_type == MGS_CFG_T_NODEMAP;
71 #else
72         return false;
73 #endif
74 }
75
76 static inline bool cld_is_barrier(struct config_llog_data *cld)
77 {
78 #ifdef HAVE_SERVER_SUPPORT
79         return cld->cld_type == MGS_CFG_T_BARRIER;
80 #else
81         return false;
82 #endif
83 }
84
85 #ifdef HAVE_SERVER_SUPPORT
86 int mgc_set_info_async_server(const struct lu_env *env,
87                               struct obd_export *exp,
88                               u32 keylen, void *key,
89                               u32 vallen, void *val,
90                               struct ptlrpc_request_set *set);
91 int mgc_process_nodemap_log(struct obd_device *obd,
92                             struct config_llog_data *cld);
93 int mgc_process_server_cfg_log(struct lu_env *env, struct llog_ctxt **ctxt,
94                                struct lustre_sb_info *lsi,
95                                struct obd_device *mgc,
96                                struct config_llog_data *cld,
97                                int local_only);
98 int mgc_process_config_server(struct obd_device *obd, size_t len, void *buf);
99 int mgc_barrier_glimpse_ast(struct ldlm_lock *lock, void *data);
100 #else /* HAVE_SERVER_SUPPORT */
101 #define mgc_barrier_glimpse_ast NULL
102 #endif /* HAVE_SERVER_SUPPORT */
103
104 /* Not sure where this should go... */
105 /* This is the timeout value for MGS_CONNECT request plus a ping interval, such
106  * that we can have a chance to try the secondary MGS if any.
107  */
108 #define  MGC_ENQUEUE_LIMIT(obd) (INITIAL_CONNECT_TIMEOUT + \
109                                  (obd_at_off(obd) ? 0 : obd_get_at_min(obd)) + \
110                                  PING_INTERVAL)
111 #define  MGC_TARGET_REG_LIMIT 10
112 #define  MGC_TARGET_REG_LIMIT_MAX RECONNECT_DELAY_MAX
113 #define  MGC_SEND_PARAM_LIMIT 10
114
115 enum {
116         CONFIG_READ_NRPAGES_INIT = 1 << (20 - PAGE_SHIFT),
117         CONFIG_READ_NRPAGES      = 4
118 };
119
120 #endif  /* _MGC_INTERNAL_H */