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