From f257bf8f400bc53beaf0084bed62386ad16f9ccd Mon Sep 17 00:00:00 2001 From: yury Date: Tue, 13 Jun 2006 15:03:09 +0000 Subject: [PATCH] - converted FLD to use req_capsule API --- lustre/fid/fid_handler.c | 2 +- lustre/fld/fld_handler.c | 47 +++++++++++++++++++++++--------------- lustre/include/lustre_req_layout.h | 5 ++++ lustre/ptlrpc/layout.c | 24 +++++++++++++++++++ 4 files changed, 58 insertions(+), 20 deletions(-) diff --git a/lustre/fid/fid_handler.c b/lustre/fid/fid_handler.c index 32d5dc1..25d8f5e 100644 --- a/lustre/fid/fid_handler.c +++ b/lustre/fid/fid_handler.c @@ -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, 0 }; + int rep_buf_size[2] = { 0, }; struct req_capsule pill; struct lu_range *out; int rc = -EPROTO; diff --git a/lustre/fld/fld_handler.c b/lustre/fld/fld_handler.c index fb4c35c..24d2764 100644 --- a/lustre/fld/fld_handler.c +++ b/lustre/fld/fld_handler.c @@ -47,6 +47,7 @@ #include #include +#include #include #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; } diff --git a/lustre/include/lustre_req_layout.h b/lustre/include/lustre_req_layout.h index 2316f57..44a379a 100644 --- a/lustre/include/lustre_req_layout.h +++ b/lustre/include/lustre_req_layout.h @@ -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__ */ diff --git a/lustre/ptlrpc/layout.c b/lustre/ptlrpc/layout.c index eda1912..efba55d 100644 --- a/lustre/ptlrpc/layout.c +++ b/lustre/ptlrpc/layout.c @@ -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); -- 1.8.3.1