Whamcloud - gitweb
- converted FLD to use req_capsule API
authoryury <yury>
Tue, 13 Jun 2006 15:03:09 +0000 (15:03 +0000)
committeryury <yury>
Tue, 13 Jun 2006 15:03:09 +0000 (15:03 +0000)
lustre/fid/fid_handler.c
lustre/fld/fld_handler.c
lustre/include/lustre_req_layout.h
lustre/ptlrpc/layout.c

index 32d5dc1..25d8f5e 100644 (file)
@@ -446,7 +446,7 @@ seq_req_handle0(const struct lu_context *ctx,
                 struct lu_server_seq *seq, 
                 struct ptlrpc_request *req) 
 {
-        int rep_buf_size[2] = { 0, };
+        int rep_buf_size[2] = { 0, };
         struct req_capsule pill;
         struct lu_range *out;
         int rc = -EPROTO;
index fb4c35c..24d2764 100644 (file)
@@ -47,6 +47,7 @@
 
 #include <dt_object.h>
 #include <md_object.h>
+#include <lustre_req_layout.h>
 #include <lustre_fld.h>
 #include "fld_internal.h"
 
@@ -401,35 +402,43 @@ fld_req_handle0(const struct lu_context *ctx,
                 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;
 }
 
 
index 2316f57..44a379a 100644 (file)
@@ -80,6 +80,7 @@ int  req_layout_init(void);
 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;
@@ -130,4 +131,8 @@ extern const struct req_msg_field RMF_REINT_OPC;
 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__ */
index eda1912..efba55d 100644 (file)
@@ -67,6 +67,15 @@ static const struct req_msg_field *seq_query_server[] = {
         &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
@@ -179,6 +188,7 @@ static const struct req_format *req_formats[] = {
         &RQF_LDLM_INTENT_CREATE,
         &RQF_LDLM_INTENT_UNLINK,
         &RQF_SEQ_QUERY,
+        &RQF_FLD_QUERY,
 };
 
 struct req_msg_field {
@@ -215,6 +225,16 @@ const struct req_msg_field RMF_SEQ_RANGE =
                     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);
@@ -349,6 +369,10 @@ const struct req_format RQF_SEQ_QUERY =
         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);