struct lu_server_seq *seq,
struct ptlrpc_request *req)
{
- int rep_buf_size[2] = { 0, 0 };
+ int rep_buf_size[2] = { 0, };
struct req_capsule pill;
struct lu_range *out;
int rc = -EPROTO;
#include <dt_object.h>
#include <md_object.h>
+#include <lustre_req_layout.h>
#include <lustre_fld.h>
#include "fld_internal.h"
struct lu_server_fld *fld,
struct ptlrpc_request *req)
{
+ int rep_buf_size[3] = { 0, };
+ struct req_capsule pill;
struct md_fld *in;
struct md_fld *out;
- int size = sizeof *in;
- int rc;
- __u32 *opt;
+ int rc = -EPROTO;
+ __u32 *opc;
ENTRY;
- rc = lustre_pack_reply(req, 1, &size, NULL);
- if (rc)
- RETURN(rc);
+ req_capsule_init(&pill, req, RCL_SERVER,
+ rep_buf_size);
- rc = -EPROTO;
- opt = lustre_swab_reqbuf(req, 0, sizeof *opt, lustre_swab_generic_32s);
- if (opt != NULL) {
- in = lustre_swab_reqbuf(req, 1, sizeof *in, lustre_swab_md_fld);
- if (in != NULL) {
- out = lustre_msg_buf(req->rq_repmsg, 0, size);
- LASSERT(out != NULL);
- *out = *in;
+ req_capsule_set(&pill, &RQF_FLD_QUERY);
+ req_capsule_pack(&pill);
- rc = fld_server_handle(fld, ctx, *opt, out);
- } else {
- CERROR("Cannot unpack mf\n");
+ opc = req_capsule_client_get(&pill, &RMF_FLD_OPC);
+ if (opc != NULL) {
+ in = req_capsule_client_get(&pill, &RMF_FLD_MDFLD);
+ if (in == NULL) {
+ CERROR("cannot unpack fld request\n");
+ GOTO(out_pill, rc = -EPROTO);
}
+ out = req_capsule_server_get(&pill, &RMF_FLD_MDFLD);
+ if (out == NULL) {
+ CERROR("cannot allocate fld response\n");
+ GOTO(out_pill, rc = -EPROTO);
+ }
+ *out = *in;
+ rc = fld_server_handle(fld, ctx, *opc, out);
} else {
- CERROR("Cannot unpack option\n");
+ CERROR("cannot unpack FLD operation\n");
}
- RETURN(rc);
+
+out_pill:
+ EXIT;
+ req_capsule_fini(&pill);
+ return rc;
}
void req_layout_fini(void);
extern const struct req_format RQF_SEQ_QUERY;
+extern const struct req_format RQF_FLD_QUERY;
extern const struct req_format RQF_MDS_GETSTATUS;
extern const struct req_format RQF_MDS_STATFS;
extern const struct req_format RQF_MDS_GETATTR;
extern const struct req_msg_field RMF_SEQ_OPC;
extern const struct req_msg_field RMF_SEQ_RANGE;
+/* FLD fields */
+extern const struct req_msg_field RMF_FLD_OPC;
+extern const struct req_msg_field RMF_FLD_MDFLD;
+
#endif /* _LUSTRE_REQ_LAYOUT_H__ */
&RMF_SEQ_RANGE
};
+static const struct req_msg_field *fld_query_client[] = {
+ &RMF_FLD_OPC,
+ &RMF_FLD_MDFLD
+};
+
+static const struct req_msg_field *fld_query_server[] = {
+ &RMF_FLD_MDFLD
+};
+
static const struct req_msg_field *mds_getattr_name_client[] = {
&RMF_MDT_BODY,
&RMF_NAME
&RQF_LDLM_INTENT_CREATE,
&RQF_LDLM_INTENT_UNLINK,
&RQF_SEQ_QUERY,
+ &RQF_FLD_QUERY,
};
struct req_msg_field {
sizeof(struct lu_range), lustre_swab_lu_range);
EXPORT_SYMBOL(RMF_SEQ_RANGE);
+const struct req_msg_field RMF_FLD_OPC =
+ DEFINE_MSGF("fld_query_opc", 0,
+ sizeof(__u32), lustre_swab_generic_32s);
+EXPORT_SYMBOL(RMF_FLD_OPC);
+
+const struct req_msg_field RMF_FLD_MDFLD =
+ DEFINE_MSGF("fld_query_mdfld", 0,
+ sizeof(struct md_fld), lustre_swab_md_fld);
+EXPORT_SYMBOL(RMF_FLD_MDFLD);
+
const struct req_msg_field RMF_MDT_BODY =
DEFINE_MSGF("mdt_body", 0,
sizeof(struct mdt_body), lustre_swab_mdt_body);
DEFINE_REQ_FMT0("SEQ_QUERY", seq_query_client, seq_query_server);
EXPORT_SYMBOL(RQF_SEQ_QUERY);
+const struct req_format RQF_FLD_QUERY =
+ DEFINE_REQ_FMT0("FLD_QUERY", fld_query_client, fld_query_server);
+EXPORT_SYMBOL(RQF_FLD_QUERY);
+
const struct req_format RQF_MDS_GETSTATUS =
DEFINE_REQ_FMT0("MDS_GETSTATUS", empty, mdt_body_only);
EXPORT_SYMBOL(RQF_MDS_GETSTATUS);