diff options
Diffstat (limited to 'rpc/rpc-lib/src/rpc-clnt.h')
-rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.h | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/rpc/rpc-lib/src/rpc-clnt.h b/rpc/rpc-lib/src/rpc-clnt.h index efc256cd261..b9d39b3320a 100644 --- a/rpc/rpc-lib/src/rpc-clnt.h +++ b/rpc/rpc-lib/src/rpc-clnt.h @@ -58,10 +58,7 @@ struct saved_frame { void *capital_this; void *frame; struct timeval saved_at; - int32_t procnum; - struct rpc_clnt_program *prog; - fop_cbk_fn_t cbkfn; - uint64_t callid; + struct rpc_req *rpcreq; rpc_transport_rsp_t rsp; }; @@ -116,14 +113,16 @@ struct rpc_req { uint32_t xid; struct iovec req[2]; int reqcnt; + struct iobref *req_iobref; struct iovec rsp[2]; int rspcnt; - struct iobuf *rsp_prochdr; - struct iobuf *rsp_procpayload; + struct iobref *rsp_iobref; int rpc_status; rpc_auth_data_t verf; rpc_clnt_prog_t *prog; int procnum; + fop_cbk_fn_t cbkfn; + void *conn_private; }; struct rpc_clnt { @@ -132,6 +131,12 @@ struct rpc_clnt { rpc_clnt_connection_t conn; void *mydata; uint64_t xid; + + /* Memory pool for rpc_req_t */ + struct mem_pool *reqpool; + + struct mem_pool *saved_frames_pool; + glusterfs_ctx_t *ctx; }; @@ -149,11 +154,28 @@ struct rpc_clnt * rpc_clnt_init (struct rpc_clnt_config *config, int rpc_clnt_register_notify (struct rpc_clnt *rpc, rpc_clnt_notify_t fn, void *mydata); +/* Some preconditions related to vectors holding responses. + * @rsphdr: should contain pointer to buffer which can hold response header + * and length of the program header. In case of procedures whose + * respnose size is not bounded (eg., glusterfs lookup), the length + * should be equal to size of buffer. + * @rsp_payload: should contain pointer and length of the bu + * + * 1. Both @rsp_hdr and @rsp_payload are optional. + * 2. The user of rpc_clnt_submit, if wants response hdr and payload in its own + * buffers, then it has to populate @rsphdr and @rsp_payload. + * 3. when @rsp_payload is not NULL, @rsphdr should + * also be filled with pointer to buffer to hold header and length + * of the header. + */ + int rpc_clnt_submit (struct rpc_clnt *rpc, rpc_clnt_prog_t *prog, int procnum, fop_cbk_fn_t cbkfn, struct iovec *proghdr, int proghdrcount, struct iovec *progpayload, int progpayloadcount, - struct iobref *iobref, void *frame); + struct iobref *iobref, void *frame, struct iovec *rsphdr, + int rsphdr_count, struct iovec *rsp_payload, + int rsp_payload_count, struct iobref *rsp_iobref); void rpc_clnt_destroy (struct rpc_clnt *rpc); |