diff options
Diffstat (limited to 'glusterfsd/src')
| -rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 40 | 
1 files changed, 27 insertions, 13 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index dea7d56b11c..f389f1fa3fc 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -68,15 +68,18 @@ mgmt_cbk_spec (void *data)  struct iobuf *  glusterfs_serialize_reply (rpcsvc_request_t *req, void *arg, -                           gf_serialize_t sfunc, struct iovec *outmsg) +                           gf_serialize_t sfunc, struct iovec *outmsg, +                           xdrproc_t xdrproc)  {          struct iobuf            *iob = NULL;          ssize_t                  retlen = -1; +        ssize_t                  xdr_size = 0;          /* First, get the io buffer into which the reply in arg will           * be serialized.           */ -        iob = iobuf_get (req->svc->ctx->iobuf_pool); +        xdr_size = xdr_sizeof (xdrproc, arg); +        iob = iobuf_get2 (req->svc->ctx->iobuf_pool, xdr_size);          if (!iob) {                  gf_log (THIS->name, GF_LOG_ERROR, "Failed to get iobuf");                  goto ret; @@ -108,7 +111,8 @@ ret:  int  glusterfs_submit_reply (rpcsvc_request_t *req, void *arg,                          struct iovec *payload, int payloadcount, -                        struct iobref *iobref, gf_serialize_t sfunc) +                        struct iobref *iobref, gf_serialize_t sfunc, +                        xdrproc_t xdrproc)  {          struct iobuf           *iob        = NULL;          int                     ret        = -1; @@ -131,7 +135,7 @@ glusterfs_submit_reply (rpcsvc_request_t *req, void *arg,                  new_iobref = 1;          } -        iob = glusterfs_serialize_reply (req, arg, sfunc, &rsp); +        iob = glusterfs_serialize_reply (req, arg, sfunc, &rsp, xdrproc);          if (!iob) {                  gf_log (THIS->name, GF_LOG_ERROR, "Failed to serialize reply");                  goto out; @@ -181,7 +185,8 @@ glusterfs_terminate_response_send (rpcsvc_request_t *req, int op_ret)          if (ret == 0)                  ret = glusterfs_submit_reply (req, &rsp, NULL, 0, NULL, -                                              gd_xdr_serialize_mgmt_brick_op_rsp); +                                              gd_xdr_serialize_mgmt_brick_op_rsp, +                                              (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);          if (rsp.output.output_val)                  GF_FREE (rsp.output.output_val); @@ -247,7 +252,8 @@ glusterfs_translator_info_response_send (rpcsvc_request_t *req, int ret,                                          (size_t *)&rsp.output.output_len);          ret = glusterfs_submit_reply (req, &rsp, NULL, 0, NULL, -                                     gd_xdr_serialize_mgmt_brick_op_rsp); +                                     gd_xdr_serialize_mgmt_brick_op_rsp, +                                     (xdrproc_t)xdr_gd1_mgmt_brick_op_rsp);          if (rsp.output.output_val)                  GF_FREE (rsp.output.output_val);          return ret; @@ -398,20 +404,24 @@ int  mgmt_submit_request (void *req, call_frame_t *frame,                       glusterfs_ctx_t *ctx,                       rpc_clnt_prog_t *prog, int procnum, -                     mgmt_serialize_t sfunc, fop_cbk_fn_t cbkfn) +                     mgmt_serialize_t sfunc, fop_cbk_fn_t cbkfn, +                     xdrproc_t xdrproc)  {          int                     ret         = -1;          int                     count      = 0;          struct iovec            iov         = {0, };          struct iobuf            *iobuf = NULL;          struct iobref           *iobref = NULL; +        ssize_t                 xdr_size = 0;          iobref = iobref_new ();          if (!iobref) {                  goto out;          } -        iobuf = iobuf_get (ctx->iobuf_pool); +        xdr_size = xdr_sizeof (xdrproc, req); + +        iobuf = iobuf_get2 (ctx->iobuf_pool, xdr_size);          if (!iobuf) {                  goto out;          }; @@ -419,7 +429,7 @@ mgmt_submit_request (void *req, call_frame_t *frame,          iobref_add (iobref, iobuf);          iov.iov_base = iobuf->ptr; -        iov.iov_len  = 128 * GF_UNIT_KB; +        iov.iov_len  = iobuf_pagesize (iobuf);          /* Create the xdr payload */ @@ -718,7 +728,8 @@ glusterfs_volfile_fetch (glusterfs_ctx_t *ctx)          ret = mgmt_submit_request (&req, frame, ctx, &clnt_handshake_prog,                                     GF_HNDSK_GETSPEC, xdr_from_getspec_req, -                                   mgmt_getspec_cbk); +                                   mgmt_getspec_cbk, +                                   (xdrproc_t)xdr_gf_getspec_req);          return ret;  } @@ -983,7 +994,8 @@ mgmt_pmap_signin_cbk (struct rpc_req *req, struct iovec *iov, int count,          ret = mgmt_submit_request (&pmap_req, frame, ctx, &clnt_pmap_prog,                                     GF_PMAP_SIGNIN, xdr_from_pmap_signin_req, -                                   mgmt_pmap_signin2_cbk); +                                   mgmt_pmap_signin2_cbk, +                                   (xdrproc_t)xdr_pmap_signin_req);          if (ret)                  goto out; @@ -1017,7 +1029,8 @@ glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx)          ret = mgmt_submit_request (&req, frame, ctx, &clnt_pmap_prog,                                     GF_PMAP_SIGNIN, xdr_from_pmap_signin_req, -                                   mgmt_pmap_signin_cbk); +                                   mgmt_pmap_signin_cbk, +                                   (xdrproc_t)xdr_pmap_signin_req);  out:          return ret; @@ -1084,7 +1097,8 @@ glusterfs_mgmt_pmap_signout (glusterfs_ctx_t *ctx)          ret = mgmt_submit_request (&req, frame, ctx, &clnt_pmap_prog,                                     GF_PMAP_SIGNOUT, xdr_from_pmap_signout_req, -                                   mgmt_pmap_signout_cbk); +                                   mgmt_pmap_signout_cbk, +                                   (xdrproc_t)xdr_pmap_signout_req);  out:          return ret;  }  | 
