Commit | Line | Data |
---|---|---|
d7e09d03 PT |
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 | |
6a5b99a4 | 18 | * http://www.gnu.org/licenses/gpl-2.0.html |
d7e09d03 | 19 | * |
d7e09d03 PT |
20 | * GPL HEADER END |
21 | */ | |
22 | /* | |
23 | * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. | |
24 | * Use is subject to license terms. | |
25 | * | |
1dc563a6 | 26 | * Copyright (c) 2011, 2015, Intel Corporation. |
d7e09d03 PT |
27 | */ |
28 | /* | |
29 | * This file is part of Lustre, http://www.lustre.org/ | |
30 | * Lustre is a trademark of Sun Microsystems, Inc. | |
31 | * | |
32 | * lustre/include/lustre_req_layout.h | |
33 | * | |
34 | * Lustre Metadata Target (mdt) request handler | |
35 | * | |
36 | * Author: Nikita Danilov <nikita@clusterfs.com> | |
37 | */ | |
38 | ||
39 | #ifndef _LUSTRE_REQ_LAYOUT_H__ | |
40 | #define _LUSTRE_REQ_LAYOUT_H__ | |
41 | ||
42 | /** \defgroup req_layout req_layout | |
43 | * | |
44 | * @{ | |
45 | */ | |
46 | ||
47 | struct req_msg_field; | |
48 | struct req_format; | |
49 | struct req_capsule; | |
50 | ||
51 | struct ptlrpc_request; | |
52 | ||
53 | enum req_location { | |
54 | RCL_CLIENT, | |
55 | RCL_SERVER, | |
56 | RCL_NR | |
57 | }; | |
58 | ||
59 | /* Maximal number of fields (buffers) in a request message. */ | |
60 | #define REQ_MAX_FIELD_NR 9 | |
61 | ||
62 | struct req_capsule { | |
63 | struct ptlrpc_request *rc_req; | |
64 | const struct req_format *rc_fmt; | |
65 | enum req_location rc_loc; | |
66 | __u32 rc_area[RCL_NR][REQ_MAX_FIELD_NR]; | |
67 | }; | |
68 | ||
69 | #if !defined(__REQ_LAYOUT_USER__) | |
70 | ||
71 | /* struct ptlrpc_request, lustre_msg* */ | |
1accaadf | 72 | #include "lustre_net.h" |
d7e09d03 PT |
73 | |
74 | void req_capsule_init(struct req_capsule *pill, struct ptlrpc_request *req, | |
75 | enum req_location location); | |
76 | void req_capsule_fini(struct req_capsule *pill); | |
77 | ||
78 | void req_capsule_set(struct req_capsule *pill, const struct req_format *fmt); | |
d7e09d03 PT |
79 | int req_capsule_filled_sizes(struct req_capsule *pill, enum req_location loc); |
80 | int req_capsule_server_pack(struct req_capsule *pill); | |
81 | ||
82 | void *req_capsule_client_get(struct req_capsule *pill, | |
83 | const struct req_msg_field *field); | |
84 | void *req_capsule_client_swab_get(struct req_capsule *pill, | |
85 | const struct req_msg_field *field, | |
86 | void *swabber); | |
87 | void *req_capsule_client_sized_get(struct req_capsule *pill, | |
88 | const struct req_msg_field *field, | |
89 | int len); | |
90 | void *req_capsule_server_get(struct req_capsule *pill, | |
91 | const struct req_msg_field *field); | |
92 | void *req_capsule_server_sized_get(struct req_capsule *pill, | |
93 | const struct req_msg_field *field, | |
94 | int len); | |
95 | void *req_capsule_server_swab_get(struct req_capsule *pill, | |
96 | const struct req_msg_field *field, | |
97 | void *swabber); | |
98 | void *req_capsule_server_sized_swab_get(struct req_capsule *pill, | |
99 | const struct req_msg_field *field, | |
100 | int len, void *swabber); | |
d7e09d03 PT |
101 | |
102 | void req_capsule_set_size(struct req_capsule *pill, | |
103 | const struct req_msg_field *field, | |
104 | enum req_location loc, int size); | |
105 | int req_capsule_get_size(const struct req_capsule *pill, | |
10457d4b OD |
106 | const struct req_msg_field *field, |
107 | enum req_location loc); | |
d7e09d03 PT |
108 | int req_capsule_msg_size(struct req_capsule *pill, enum req_location loc); |
109 | int req_capsule_fmt_size(__u32 magic, const struct req_format *fmt, | |
110 | enum req_location loc); | |
111 | void req_capsule_extend(struct req_capsule *pill, const struct req_format *fmt); | |
112 | ||
113 | int req_capsule_has_field(const struct req_capsule *pill, | |
114 | const struct req_msg_field *field, | |
115 | enum req_location loc); | |
d7e09d03 PT |
116 | void req_capsule_shrink(struct req_capsule *pill, |
117 | const struct req_msg_field *field, | |
118 | unsigned int newlen, | |
119 | enum req_location loc); | |
d7e09d03 PT |
120 | int req_layout_init(void); |
121 | void req_layout_fini(void); | |
122 | ||
123 | /* __REQ_LAYOUT_USER__ */ | |
124 | #endif | |
125 | ||
126 | extern struct req_format RQF_OBD_PING; | |
127 | extern struct req_format RQF_OBD_SET_INFO; | |
128 | extern struct req_format RQF_SEC_CTX; | |
d7e09d03 PT |
129 | /* MGS req_format */ |
130 | extern struct req_format RQF_MGS_TARGET_REG; | |
131 | extern struct req_format RQF_MGS_SET_INFO; | |
132 | extern struct req_format RQF_MGS_CONFIG_READ; | |
133 | /* fid/fld req_format */ | |
134 | extern struct req_format RQF_SEQ_QUERY; | |
135 | extern struct req_format RQF_FLD_QUERY; | |
b78c2b9b | 136 | extern struct req_format RQF_FLD_READ; |
d7e09d03 PT |
137 | /* MDS req_format */ |
138 | extern struct req_format RQF_MDS_CONNECT; | |
139 | extern struct req_format RQF_MDS_DISCONNECT; | |
140 | extern struct req_format RQF_MDS_STATFS; | |
141 | extern struct req_format RQF_MDS_GETSTATUS; | |
142 | extern struct req_format RQF_MDS_SYNC; | |
143 | extern struct req_format RQF_MDS_GETXATTR; | |
144 | extern struct req_format RQF_MDS_GETATTR; | |
d7e09d03 PT |
145 | |
146 | /* | |
147 | * This is format of direct (non-intent) MDS_GETATTR_NAME request. | |
148 | */ | |
149 | extern struct req_format RQF_MDS_GETATTR_NAME; | |
150 | extern struct req_format RQF_MDS_CLOSE; | |
48d23e61 | 151 | extern struct req_format RQF_MDS_RELEASE_CLOSE; |
d7e09d03 PT |
152 | extern struct req_format RQF_MDS_CONNECT; |
153 | extern struct req_format RQF_MDS_DISCONNECT; | |
154 | extern struct req_format RQF_MDS_GET_INFO; | |
155 | extern struct req_format RQF_MDS_READPAGE; | |
156 | extern struct req_format RQF_MDS_WRITEPAGE; | |
d7e09d03 PT |
157 | extern struct req_format RQF_MDS_DONE_WRITING; |
158 | extern struct req_format RQF_MDS_REINT; | |
159 | extern struct req_format RQF_MDS_REINT_CREATE; | |
341f1f0a | 160 | extern struct req_format RQF_MDS_REINT_CREATE_ACL; |
d7e09d03 PT |
161 | extern struct req_format RQF_MDS_REINT_CREATE_SLAVE; |
162 | extern struct req_format RQF_MDS_REINT_CREATE_SYM; | |
163 | extern struct req_format RQF_MDS_REINT_OPEN; | |
164 | extern struct req_format RQF_MDS_REINT_UNLINK; | |
165 | extern struct req_format RQF_MDS_REINT_LINK; | |
166 | extern struct req_format RQF_MDS_REINT_RENAME; | |
167 | extern struct req_format RQF_MDS_REINT_SETATTR; | |
168 | extern struct req_format RQF_MDS_REINT_SETXATTR; | |
169 | extern struct req_format RQF_MDS_QUOTACHECK; | |
170 | extern struct req_format RQF_MDS_QUOTACTL; | |
171 | extern struct req_format RQF_QC_CALLBACK; | |
d7e09d03 PT |
172 | extern struct req_format RQF_MDS_SWAP_LAYOUTS; |
173 | /* MDS hsm formats */ | |
174 | extern struct req_format RQF_MDS_HSM_STATE_GET; | |
175 | extern struct req_format RQF_MDS_HSM_STATE_SET; | |
176 | extern struct req_format RQF_MDS_HSM_ACTION; | |
177 | extern struct req_format RQF_MDS_HSM_PROGRESS; | |
178 | extern struct req_format RQF_MDS_HSM_CT_REGISTER; | |
179 | extern struct req_format RQF_MDS_HSM_CT_UNREGISTER; | |
180 | extern struct req_format RQF_MDS_HSM_REQUEST; | |
181 | /* OST req_format */ | |
182 | extern struct req_format RQF_OST_CONNECT; | |
183 | extern struct req_format RQF_OST_DISCONNECT; | |
184 | extern struct req_format RQF_OST_QUOTACHECK; | |
185 | extern struct req_format RQF_OST_QUOTACTL; | |
186 | extern struct req_format RQF_OST_GETATTR; | |
187 | extern struct req_format RQF_OST_SETATTR; | |
188 | extern struct req_format RQF_OST_CREATE; | |
189 | extern struct req_format RQF_OST_PUNCH; | |
190 | extern struct req_format RQF_OST_SYNC; | |
191 | extern struct req_format RQF_OST_DESTROY; | |
192 | extern struct req_format RQF_OST_BRW_READ; | |
193 | extern struct req_format RQF_OST_BRW_WRITE; | |
194 | extern struct req_format RQF_OST_STATFS; | |
195 | extern struct req_format RQF_OST_SET_GRANT_INFO; | |
45fe5b13 | 196 | extern struct req_format RQF_OST_GET_INFO; |
d7e09d03 PT |
197 | extern struct req_format RQF_OST_GET_INFO_LAST_ID; |
198 | extern struct req_format RQF_OST_GET_INFO_LAST_FID; | |
199 | extern struct req_format RQF_OST_SET_INFO_LAST_FID; | |
200 | extern struct req_format RQF_OST_GET_INFO_FIEMAP; | |
201 | ||
202 | /* LDLM req_format */ | |
203 | extern struct req_format RQF_LDLM_ENQUEUE; | |
204 | extern struct req_format RQF_LDLM_ENQUEUE_LVB; | |
205 | extern struct req_format RQF_LDLM_CONVERT; | |
206 | extern struct req_format RQF_LDLM_INTENT; | |
207 | extern struct req_format RQF_LDLM_INTENT_BASIC; | |
208 | extern struct req_format RQF_LDLM_INTENT_LAYOUT; | |
209 | extern struct req_format RQF_LDLM_INTENT_GETATTR; | |
210 | extern struct req_format RQF_LDLM_INTENT_OPEN; | |
211 | extern struct req_format RQF_LDLM_INTENT_CREATE; | |
212 | extern struct req_format RQF_LDLM_INTENT_UNLINK; | |
7fc1f831 | 213 | extern struct req_format RQF_LDLM_INTENT_GETXATTR; |
d7e09d03 PT |
214 | extern struct req_format RQF_LDLM_CANCEL; |
215 | extern struct req_format RQF_LDLM_CALLBACK; | |
216 | extern struct req_format RQF_LDLM_CP_CALLBACK; | |
217 | extern struct req_format RQF_LDLM_BL_CALLBACK; | |
218 | extern struct req_format RQF_LDLM_GL_CALLBACK; | |
219 | extern struct req_format RQF_LDLM_GL_DESC_CALLBACK; | |
220 | /* LOG req_format */ | |
221 | extern struct req_format RQF_LOG_CANCEL; | |
222 | extern struct req_format RQF_LLOG_ORIGIN_HANDLE_CREATE; | |
223 | extern struct req_format RQF_LLOG_ORIGIN_HANDLE_DESTROY; | |
224 | extern struct req_format RQF_LLOG_ORIGIN_HANDLE_NEXT_BLOCK; | |
225 | extern struct req_format RQF_LLOG_ORIGIN_HANDLE_PREV_BLOCK; | |
226 | extern struct req_format RQF_LLOG_ORIGIN_HANDLE_READ_HEADER; | |
227 | extern struct req_format RQF_LLOG_ORIGIN_CONNECT; | |
228 | ||
65f1c781 MP |
229 | extern struct req_format RQF_CONNECT; |
230 | ||
d7e09d03 PT |
231 | extern struct req_msg_field RMF_GENERIC_DATA; |
232 | extern struct req_msg_field RMF_PTLRPC_BODY; | |
233 | extern struct req_msg_field RMF_MDT_BODY; | |
234 | extern struct req_msg_field RMF_MDT_EPOCH; | |
235 | extern struct req_msg_field RMF_OBD_STATFS; | |
236 | extern struct req_msg_field RMF_NAME; | |
237 | extern struct req_msg_field RMF_SYMTGT; | |
238 | extern struct req_msg_field RMF_TGTUUID; | |
239 | extern struct req_msg_field RMF_CLUUID; | |
240 | extern struct req_msg_field RMF_SETINFO_VAL; | |
241 | extern struct req_msg_field RMF_SETINFO_KEY; | |
242 | extern struct req_msg_field RMF_GETINFO_VAL; | |
243 | extern struct req_msg_field RMF_GETINFO_VALLEN; | |
244 | extern struct req_msg_field RMF_GETINFO_KEY; | |
48d23e61 | 245 | extern struct req_msg_field RMF_CLOSE_DATA; |
d7e09d03 PT |
246 | |
247 | /* | |
248 | * connection handle received in MDS_CONNECT request. | |
249 | */ | |
250 | extern struct req_msg_field RMF_CONN; | |
251 | extern struct req_msg_field RMF_CONNECT_DATA; | |
252 | extern struct req_msg_field RMF_DLM_REQ; | |
253 | extern struct req_msg_field RMF_DLM_REP; | |
254 | extern struct req_msg_field RMF_DLM_LVB; | |
255 | extern struct req_msg_field RMF_DLM_GL_DESC; | |
256 | extern struct req_msg_field RMF_LDLM_INTENT; | |
257 | extern struct req_msg_field RMF_LAYOUT_INTENT; | |
258 | extern struct req_msg_field RMF_MDT_MD; | |
259 | extern struct req_msg_field RMF_REC_REINT; | |
260 | extern struct req_msg_field RMF_EADATA; | |
7fc1f831 AP |
261 | extern struct req_msg_field RMF_EAVALS; |
262 | extern struct req_msg_field RMF_EAVALS_LENS; | |
d7e09d03 PT |
263 | extern struct req_msg_field RMF_ACL; |
264 | extern struct req_msg_field RMF_LOGCOOKIES; | |
265 | extern struct req_msg_field RMF_CAPA1; | |
266 | extern struct req_msg_field RMF_CAPA2; | |
267 | extern struct req_msg_field RMF_OBD_QUOTACHECK; | |
268 | extern struct req_msg_field RMF_OBD_QUOTACTL; | |
d7e09d03 PT |
269 | extern struct req_msg_field RMF_STRING; |
270 | extern struct req_msg_field RMF_SWAP_LAYOUTS; | |
271 | extern struct req_msg_field RMF_MDS_HSM_PROGRESS; | |
272 | extern struct req_msg_field RMF_MDS_HSM_REQUEST; | |
273 | extern struct req_msg_field RMF_MDS_HSM_USER_ITEM; | |
274 | extern struct req_msg_field RMF_MDS_HSM_ARCHIVE; | |
275 | extern struct req_msg_field RMF_HSM_USER_STATE; | |
276 | extern struct req_msg_field RMF_HSM_STATE_SET; | |
277 | extern struct req_msg_field RMF_MDS_HSM_CURRENT_ACTION; | |
278 | extern struct req_msg_field RMF_MDS_HSM_REQUEST; | |
279 | ||
280 | /* seq-mgr fields */ | |
281 | extern struct req_msg_field RMF_SEQ_OPC; | |
282 | extern struct req_msg_field RMF_SEQ_RANGE; | |
283 | extern struct req_msg_field RMF_FID_SPACE; | |
284 | ||
285 | /* FLD fields */ | |
286 | extern struct req_msg_field RMF_FLD_OPC; | |
287 | extern struct req_msg_field RMF_FLD_MDFLD; | |
288 | ||
289 | extern struct req_msg_field RMF_LLOGD_BODY; | |
290 | extern struct req_msg_field RMF_LLOG_LOG_HDR; | |
291 | extern struct req_msg_field RMF_LLOGD_CONN_BODY; | |
292 | ||
293 | extern struct req_msg_field RMF_MGS_TARGET_INFO; | |
294 | extern struct req_msg_field RMF_MGS_SEND_PARAM; | |
295 | ||
296 | extern struct req_msg_field RMF_OST_BODY; | |
297 | extern struct req_msg_field RMF_OBD_IOOBJ; | |
298 | extern struct req_msg_field RMF_OBD_ID; | |
299 | extern struct req_msg_field RMF_FID; | |
300 | extern struct req_msg_field RMF_NIOBUF_REMOTE; | |
301 | extern struct req_msg_field RMF_RCS; | |
302 | extern struct req_msg_field RMF_FIEMAP_KEY; | |
303 | extern struct req_msg_field RMF_FIEMAP_VAL; | |
304 | extern struct req_msg_field RMF_OST_ID; | |
305 | ||
306 | /* MGS config read message format */ | |
307 | extern struct req_msg_field RMF_MGS_CONFIG_BODY; | |
308 | extern struct req_msg_field RMF_MGS_CONFIG_RES; | |
309 | ||
310 | /* generic uint32 */ | |
311 | extern struct req_msg_field RMF_U32; | |
312 | ||
d7e09d03 PT |
313 | /** @} req_layout */ |
314 | ||
315 | #endif /* _LUSTRE_REQ_LAYOUT_H__ */ |