256ebe
From 83d816370f7540d4065baac704df65c648a03125 Mon Sep 17 00:00:00 2001
256ebe
From: Poornima G <pgurusid@redhat.com>
256ebe
Date: Sun, 24 Mar 2019 09:40:50 +0530
256ebe
Subject: [PATCH 47/52] client-rpc: Fix the payload being sent on the wire
256ebe
256ebe
The fops allocate 3 kind of payload(buffer) in the client xlator:
256ebe
- fop payload, this is the buffer allocated by the write and put fop
256ebe
- rsphdr paylod, this is the buffer required by the reply cbk of
256ebe
  some fops like lookup, readdir.
256ebe
- rsp_paylod, this is the buffer required by the reply cbk of fops like
256ebe
  readv etc.
256ebe
256ebe
Currently, in the lookup and readdir fop the rsphdr is sent as payload,
256ebe
hence the allocated rsphdr buffer is also sent on the wire, increasing
256ebe
the bandwidth consumption on the wire.
256ebe
256ebe
With this patch, the issue is fixed.
256ebe
256ebe
>Fixes: bz#1692093
256ebe
>Change-Id: Ie8158921f4db319e60ad5f52d851fa5c9d4a269b
256ebe
>Signed-off-by: Poornima G <pgurusid@redhat.com>
256ebe
>Backport-of: https://review.gluster.org/22402/
256ebe
256ebe
BUG: 1693935
256ebe
Change-Id: Id12746a4c9416288bc1387c8b018bbe9cc4b637d
256ebe
Signed-off-by: Poornima G <pgurusid@redhat.com>
256ebe
Reviewed-on: https://code.engineering.redhat.com/gerrit/166535
256ebe
Tested-by: RHGS Build Bot <nigelb@redhat.com>
256ebe
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
256ebe
---
256ebe
 xlators/protocol/client/src/client-handshake.c   |  29 ++-
256ebe
 xlators/protocol/client/src/client-helpers.c     |  14 +-
256ebe
 xlators/protocol/client/src/client-rpc-fops.c    | 235 ++++++++++++----------
256ebe
 xlators/protocol/client/src/client-rpc-fops_v2.c | 236 ++++++++++++-----------
256ebe
 xlators/protocol/client/src/client.c             |  22 ++-
256ebe
 xlators/protocol/client/src/client.h             |  16 +-
256ebe
 6 files changed, 308 insertions(+), 244 deletions(-)
256ebe
256ebe
diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c
256ebe
index f9631c5..c43756a 100644
256ebe
--- a/xlators/protocol/client/src/client-handshake.c
256ebe
+++ b/xlators/protocol/client/src/client-handshake.c
256ebe
@@ -34,7 +34,6 @@ typedef struct client_fd_lk_local {
256ebe
     clnt_fd_ctx_t *fdctx;
256ebe
 } clnt_fd_lk_local_t;
256ebe
 
256ebe
-
256ebe
 int32_t
256ebe
 client3_getspec(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 {
256ebe
@@ -201,8 +200,8 @@ clnt_release_reopen_fd(xlator_t *this, clnt_fd_ctx_t *fdctx)
256ebe
     req.fd = fdctx->remote_fd;
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_RELEASE,
256ebe
-                                clnt_release_reopen_fd_cbk, NULL, NULL, 0, NULL,
256ebe
-                                0, NULL, (xdrproc_t)xdr_gfs3_releasedir_req);
256ebe
+                                clnt_release_reopen_fd_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_releasedir_req);
256ebe
 out:
256ebe
     if (ret) {
256ebe
         clnt_fd_lk_reacquire_failed(this, fdctx, conf);
256ebe
@@ -486,8 +485,8 @@ protocol_client_reopendir(clnt_fd_ctx_t *fdctx, xlator_t *this)
256ebe
     frame->local = local;
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_OPENDIR,
256ebe
-                                client3_3_reopendir_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_opendir_req);
256ebe
+                                client3_3_reopendir_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_opendir_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_ERROR, 0, PC_MSG_DIR_OP_FAILED,
256ebe
                "failed to send the re-opendir request");
256ebe
@@ -547,8 +546,8 @@ protocol_client_reopenfile(clnt_fd_ctx_t *fdctx, xlator_t *this)
256ebe
                  local->loc.path);
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_OPEN,
256ebe
-                                client3_3_reopen_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_open_req);
256ebe
+                                client3_3_reopen_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_open_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_ERROR, 0, PC_MSG_DIR_OP_FAILED,
256ebe
                "failed to send the re-open request");
256ebe
@@ -745,8 +744,8 @@ protocol_client_reopendir_v2(clnt_fd_ctx_t *fdctx, xlator_t *this)
256ebe
     frame->local = local;
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_OPENDIR,
256ebe
-                                client4_0_reopendir_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_opendir_req);
256ebe
+                                client4_0_reopendir_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_opendir_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_ERROR, 0, PC_MSG_DIR_OP_FAILED,
256ebe
                "failed to send the re-opendir request");
256ebe
@@ -806,8 +805,8 @@ protocol_client_reopenfile_v2(clnt_fd_ctx_t *fdctx, xlator_t *this)
256ebe
                  local->loc.path);
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_OPEN,
256ebe
-                                client4_0_reopen_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_open_req);
256ebe
+                                client4_0_reopen_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_open_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_ERROR, 0, PC_MSG_DIR_OP_FAILED,
256ebe
                "failed to send the re-open request");
256ebe
@@ -1312,7 +1311,6 @@ client_setvolume(xlator_t *this, struct rpc_clnt *rpc)
256ebe
 
256ebe
     ret = client_submit_request(this, &req, fr, conf->handshake,
256ebe
                                 GF_HNDSK_SETVOLUME, client_setvolume_cbk, NULL,
256ebe
-                                NULL, 0, NULL, 0, NULL,
256ebe
                                 (xdrproc_t)xdr_gf_setvolume_req);
256ebe
 
256ebe
 fail:
256ebe
@@ -1522,8 +1520,7 @@ client_query_portmap(xlator_t *this, struct rpc_clnt *rpc)
256ebe
 
256ebe
     ret = client_submit_request(this, &req, fr, &clnt_pmap_prog,
256ebe
                                 GF_PMAP_PORTBYBRICK, client_query_portmap_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_pmap_port_by_brick_req);
256ebe
+                                NULL, (xdrproc_t)xdr_pmap_port_by_brick_req);
256ebe
 
256ebe
 fail:
256ebe
     return ret;
256ebe
@@ -1624,8 +1621,8 @@ client_handshake(xlator_t *this, struct rpc_clnt *rpc)
256ebe
 
256ebe
     req.gfs_id = 0xbabe;
256ebe
     ret = client_submit_request(this, &req, frame, conf->dump, GF_DUMP_DUMP,
256ebe
-                                client_dump_version_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gf_dump_req);
256ebe
+                                client_dump_version_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gf_dump_req);
256ebe
 
256ebe
 out:
256ebe
     return ret;
256ebe
diff --git a/xlators/protocol/client/src/client-helpers.c b/xlators/protocol/client/src/client-helpers.c
256ebe
index 2dd7106..53b4484 100644
256ebe
--- a/xlators/protocol/client/src/client-helpers.c
256ebe
+++ b/xlators/protocol/client/src/client-helpers.c
256ebe
@@ -3082,8 +3082,7 @@ send_release4_0_over_wire(xlator_t *this, clnt_fd_ctx_t *fdctx,
256ebe
         gf_msg_trace(this->name, 0, "sending releasedir on fd");
256ebe
         (void)client_submit_request(
256ebe
             this, &req, fr, conf->fops, GFS3_OP_RELEASEDIR,
256ebe
-            client4_0_releasedir_cbk, NULL, NULL, 0, NULL, 0, NULL,
256ebe
-            (xdrproc_t)xdr_gfx_releasedir_req);
256ebe
+            client4_0_releasedir_cbk, NULL, (xdrproc_t)xdr_gfx_releasedir_req);
256ebe
     } else {
256ebe
         gfx_release_req req = {
256ebe
             {
256ebe
@@ -3094,8 +3093,8 @@ send_release4_0_over_wire(xlator_t *this, clnt_fd_ctx_t *fdctx,
256ebe
         req.fd = fdctx->remote_fd;
256ebe
         gf_msg_trace(this->name, 0, "sending release on fd");
256ebe
         (void)client_submit_request(this, &req, fr, conf->fops, GFS3_OP_RELEASE,
256ebe
-                                    client4_0_release_cbk, NULL, NULL, 0, NULL,
256ebe
-                                    0, NULL, (xdrproc_t)xdr_gfx_release_req);
256ebe
+                                    client4_0_release_cbk, NULL,
256ebe
+                                    (xdrproc_t)xdr_gfx_release_req);
256ebe
     }
256ebe
 
256ebe
     return 0;
256ebe
@@ -3118,8 +3117,7 @@ send_release3_3_over_wire(xlator_t *this, clnt_fd_ctx_t *fdctx,
256ebe
         gf_msg_trace(this->name, 0, "sending releasedir on fd");
256ebe
         (void)client_submit_request(
256ebe
             this, &req, fr, conf->fops, GFS3_OP_RELEASEDIR,
256ebe
-            client3_3_releasedir_cbk, NULL, NULL, 0, NULL, 0, NULL,
256ebe
-            (xdrproc_t)xdr_gfs3_releasedir_req);
256ebe
+            client3_3_releasedir_cbk, NULL, (xdrproc_t)xdr_gfs3_releasedir_req);
256ebe
     } else {
256ebe
         gfs3_release_req req = {
256ebe
             {
256ebe
@@ -3130,8 +3128,8 @@ send_release3_3_over_wire(xlator_t *this, clnt_fd_ctx_t *fdctx,
256ebe
         req.fd = fdctx->remote_fd;
256ebe
         gf_msg_trace(this->name, 0, "sending release on fd");
256ebe
         (void)client_submit_request(this, &req, fr, conf->fops, GFS3_OP_RELEASE,
256ebe
-                                    client3_3_release_cbk, NULL, NULL, 0, NULL,
256ebe
-                                    0, NULL, (xdrproc_t)xdr_gfs3_release_req);
256ebe
+                                    client3_3_release_cbk, NULL,
256ebe
+                                    (xdrproc_t)xdr_gfs3_release_req);
256ebe
     }
256ebe
 
256ebe
     return 0;
256ebe
diff --git a/xlators/protocol/client/src/client-rpc-fops.c b/xlators/protocol/client/src/client-rpc-fops.c
256ebe
index b7df7cc..1c8b31b 100644
256ebe
--- a/xlators/protocol/client/src/client-rpc-fops.c
256ebe
+++ b/xlators/protocol/client/src/client-rpc-fops.c
256ebe
@@ -3234,11 +3234,13 @@ client3_3_lookup(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     struct iobref *rsp_iobref = NULL;
256ebe
     struct iobuf *rsp_iobuf = NULL;
256ebe
     struct iovec *rsphdr = NULL;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
     memset(vector, 0, sizeof(vector));
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
 
256ebe
     conf = this->private;
256ebe
     args = data;
256ebe
@@ -3288,9 +3290,12 @@ client3_3_lookup(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         op_errno = -ret;
256ebe
         goto unwind;
256ebe
     }
256ebe
+
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = local->iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_LOOKUP,
256ebe
-                                client3_3_lookup_cbk, NULL, rsphdr, count, NULL,
256ebe
-                                0, local->iobref,
256ebe
+                                client3_3_lookup_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfs3_lookup_req);
256ebe
 
256ebe
     if (ret) {
256ebe
@@ -3338,8 +3343,8 @@ client3_3_stat(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_STAT,
256ebe
-                                client3_3_stat_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_stat_req);
256ebe
+                                client3_3_stat_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_stat_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3381,8 +3386,8 @@ client3_3_truncate(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_TRUNCATE,
256ebe
-                                client3_3_truncate_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_truncate_req);
256ebe
+                                client3_3_truncate_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_truncate_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3425,8 +3430,7 @@ client3_3_ftruncate(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_FTRUNCATE, client3_3_ftruncate_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfs3_ftruncate_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfs3_ftruncate_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3468,8 +3472,8 @@ client3_3_access(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_ACCESS,
256ebe
-                                client3_3_access_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_access_req);
256ebe
+                                client3_3_access_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_access_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3505,10 +3509,12 @@ client3_3_readlink(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     struct iovec vector[MAX_IOVEC] = {
256ebe
         {0},
256ebe
     };
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
 
256ebe
     conf = this->private;
256ebe
@@ -3547,9 +3553,11 @@ client3_3_readlink(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     rsp_iobuf = NULL;
256ebe
     rsp_iobref = NULL;
256ebe
 
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = local->iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_READLINK,
256ebe
-                                client3_3_readlink_cbk, NULL, rsphdr, count,
256ebe
-                                NULL, 0, local->iobref,
256ebe
+                                client3_3_readlink_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfs3_readlink_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -3595,8 +3603,8 @@ client3_3_unlink(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_UNLINK,
256ebe
-                                client3_3_unlink_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_unlink_req);
256ebe
+                                client3_3_unlink_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_unlink_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3638,8 +3646,8 @@ client3_3_rmdir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_RMDIR,
256ebe
-                                client3_3_rmdir_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_rmdir_req);
256ebe
+                                client3_3_rmdir_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_rmdir_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3697,8 +3705,8 @@ client3_3_symlink(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_SYMLINK,
256ebe
-                                client3_3_symlink_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_symlink_req);
256ebe
+                                client3_3_symlink_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_symlink_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3743,8 +3751,8 @@ client3_3_rename(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_RENAME,
256ebe
-                                client3_3_rename_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_rename_req);
256ebe
+                                client3_3_rename_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_rename_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3802,8 +3810,8 @@ client3_3_link(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     loc_path(&local->loc2, NULL);
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_LINK,
256ebe
-                                client3_3_link_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_link_req);
256ebe
+                                client3_3_link_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_link_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3857,8 +3865,8 @@ client3_3_mknod(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_MKNOD,
256ebe
-                                client3_3_mknod_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_mknod_req);
256ebe
+                                client3_3_mknod_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_mknod_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3924,8 +3932,8 @@ client3_3_mkdir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_MKDIR,
256ebe
-                                client3_3_mkdir_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_mkdir_req);
256ebe
+                                client3_3_mkdir_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_mkdir_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3982,8 +3990,8 @@ client3_3_create(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_CREATE,
256ebe
-                                client3_3_create_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_create_req);
256ebe
+                                client3_3_create_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_create_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4043,8 +4051,8 @@ client3_3_open(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_OPEN,
256ebe
-                                client3_3_open_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_open_req);
256ebe
+                                client3_3_open_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_open_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4079,10 +4087,12 @@ client3_3_readv(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     };
256ebe
     struct iobuf *rsp_iobuf = NULL;
256ebe
     struct iobref *rsp_iobref = NULL;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -4130,9 +4140,12 @@ client3_3_readv(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     local->iobref = rsp_iobref;
256ebe
     rsp_iobref = NULL;
256ebe
 
256ebe
+    cp.rsp_payload = &rsp_vec;
256ebe
+    cp.rsp_payload_cnt = 1;
256ebe
+    cp.rsp_iobref = local->iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_READ,
256ebe
-                                client3_3_readv_cbk, NULL, NULL, 0, &rsp_vec, 1,
256ebe
-                                local->iobref, (xdrproc_t)xdr_gfs3_read_req);
256ebe
+                                client3_3_readv_cbk, &cp,
256ebe
+                                (xdrproc_t)xdr_gfs3_read_req);
256ebe
     if (ret) {
256ebe
         // unwind is done in the cbk
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -4167,10 +4180,12 @@ client3_3_writev(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     };
256ebe
     int op_errno = ESTALE;
256ebe
     int ret = 0;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -4187,9 +4202,12 @@ client3_3_writev(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         op_errno = -ret;
256ebe
         goto unwind;
256ebe
     }
256ebe
+
256ebe
+    cp.iobref = args->iobref;
256ebe
+    cp.payload = args->vector;
256ebe
+    cp.payload_cnt = args->count;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_WRITE,
256ebe
-                                client3_3_writev_cbk, args->iobref,
256ebe
-                                args->vector, args->count, NULL, 0, NULL,
256ebe
+                                client3_3_writev_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfs3_write_req);
256ebe
     if (ret) {
256ebe
         /*
256ebe
@@ -4248,8 +4266,8 @@ client3_3_flush(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FLUSH,
256ebe
-                                client3_3_flush_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_flush_req);
256ebe
+                                client3_3_flush_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_flush_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4291,8 +4309,8 @@ client3_3_fsync(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FSYNC,
256ebe
-                                client3_3_fsync_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_fsync_req);
256ebe
+                                client3_3_fsync_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_fsync_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4336,8 +4354,8 @@ client3_3_fstat(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FSTAT,
256ebe
-                                client3_3_fstat_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_fstat_req);
256ebe
+                                client3_3_fstat_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_fstat_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4391,8 +4409,8 @@ client3_3_opendir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_OPENDIR,
256ebe
-                                client3_3_opendir_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_opendir_req);
256ebe
+                                client3_3_opendir_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_opendir_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4435,8 +4453,8 @@ client3_3_fsyncdir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FSYNCDIR,
256ebe
-                                client3_3_fsyncdir_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_fsyncdir_req);
256ebe
+                                client3_3_fsyncdir_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_fsyncdir_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4479,8 +4497,8 @@ client3_3_statfs(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_STATFS,
256ebe
-                                client3_3_statfs_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_statfs_req);
256ebe
+                                client3_3_statfs_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_statfs_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4523,8 +4541,8 @@ client3_3_setxattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_SETXATTR,
256ebe
-                                client3_3_setxattr_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_setxattr_req);
256ebe
+                                client3_3_setxattr_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_setxattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4570,8 +4588,7 @@ client3_3_fsetxattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_FSETXATTR, client3_3_fsetxattr_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfs3_fsetxattr_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfs3_fsetxattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4611,10 +4628,12 @@ client3_3_fgetxattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     struct iovec vector[MAX_IOVEC] = {
256ebe
         {0},
256ebe
     };
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -4654,9 +4673,12 @@ client3_3_fgetxattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         op_errno = -ret;
256ebe
         goto unwind;
256ebe
     }
256ebe
+
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = local->iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
-                                GFS3_OP_FGETXATTR, client3_3_fgetxattr_cbk,
256ebe
-                                NULL, rsphdr, count, NULL, 0, local->iobref,
256ebe
+                                GFS3_OP_FGETXATTR, client3_3_fgetxattr_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfs3_fgetxattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -4699,11 +4721,14 @@ client3_3_getxattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     struct iovec vector[MAX_IOVEC] = {
256ebe
         {0},
256ebe
     };
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data) {
256ebe
         op_errno = 0;
256ebe
         goto unwind;
256ebe
     }
256ebe
+
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
 
256ebe
     local = mem_get0(this->local_pool);
256ebe
@@ -4775,9 +4800,12 @@ client3_3_getxattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         op_errno = -ret;
256ebe
         goto unwind;
256ebe
     }
256ebe
+
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = local->iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_GETXATTR,
256ebe
-                                client3_3_getxattr_cbk, NULL, rsphdr, count,
256ebe
-                                NULL, 0, local->iobref,
256ebe
+                                client3_3_getxattr_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfs3_getxattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -4822,10 +4850,12 @@ client3_3_xattrop(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     struct iovec vector[MAX_IOVEC] = {
256ebe
         {0},
256ebe
     };
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
 
256ebe
     if (!(args->loc && args->loc->inode))
256ebe
@@ -4871,9 +4901,12 @@ client3_3_xattrop(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         op_errno = -ret;
256ebe
         goto unwind;
256ebe
     }
256ebe
+
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = local->iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_XATTROP,
256ebe
-                                client3_3_xattrop_cbk, NULL, rsphdr, count,
256ebe
-                                NULL, 0, local->iobref,
256ebe
+                                client3_3_xattrop_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfs3_xattrop_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -4918,10 +4951,12 @@ client3_3_fxattrop(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     struct iovec vector[MAX_IOVEC] = {
256ebe
         {0},
256ebe
     };
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -4962,9 +4997,11 @@ client3_3_fxattrop(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     rsp_iobuf = NULL;
256ebe
     rsp_iobref = NULL;
256ebe
 
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = local->iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FXATTROP,
256ebe
-                                client3_3_fxattrop_cbk, NULL, rsphdr, count,
256ebe
-                                NULL, 0, local->iobref,
256ebe
+                                client3_3_fxattrop_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfs3_fxattrop_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -5016,8 +5053,7 @@ client3_3_removexattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_REMOVEXATTR, client3_3_removexattr_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfs3_removexattr_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfs3_removexattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5059,10 +5095,9 @@ client3_3_fremovexattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         op_errno = -ret;
256ebe
         goto unwind;
256ebe
     }
256ebe
-    ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
-                                GFS3_OP_FREMOVEXATTR,
256ebe
-                                client3_3_fremovexattr_cbk, NULL, NULL, 0, NULL,
256ebe
-                                0, NULL, (xdrproc_t)xdr_gfs3_fremovexattr_req);
256ebe
+    ret = client_submit_request(
256ebe
+        this, &req, frame, conf->fops, GFS3_OP_FREMOVEXATTR,
256ebe
+        client3_3_fremovexattr_cbk, NULL, (xdrproc_t)xdr_gfs3_fremovexattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5104,8 +5139,8 @@ client3_3_lease(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_LEASE,
256ebe
-                                client3_3_lease_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_lease_req);
256ebe
+                                client3_3_lease_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_lease_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5167,7 +5202,7 @@ client3_3_lk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_LK,
256ebe
-                                client3_3_lk_cbk, NULL, NULL, 0, NULL, 0, NULL,
256ebe
+                                client3_3_lk_cbk, NULL,
256ebe
                                 (xdrproc_t)xdr_gfs3_lk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -5210,8 +5245,8 @@ client3_3_inodelk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_INODELK,
256ebe
-                                client3_3_inodelk_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_inodelk_req);
256ebe
+                                client3_3_inodelk_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_inodelk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5260,8 +5295,8 @@ client3_3_finodelk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FINODELK,
256ebe
-                                client3_3_finodelk_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_finodelk_req);
256ebe
+                                client3_3_finodelk_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_finodelk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5305,8 +5340,8 @@ client3_3_entrylk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_ENTRYLK,
256ebe
-                                client3_3_entrylk_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_entrylk_req);
256ebe
+                                client3_3_entrylk_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_entrylk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5349,8 +5384,8 @@ client3_3_fentrylk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FENTRYLK,
256ebe
-                                client3_3_fentrylk_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_fentrylk_req);
256ebe
+                                client3_3_fentrylk_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_fentrylk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5391,8 +5426,7 @@ client3_3_rchecksum(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_RCHECKSUM, client3_3_rchecksum_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfs3_rchecksum_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfs3_rchecksum_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5433,10 +5467,12 @@ client3_3_readdir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         {0},
256ebe
     };
256ebe
     int readdir_rsp_size = 0;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -5486,9 +5522,11 @@ client3_3_readdir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
 
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = rsp_iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_READDIR,
256ebe
-                                client3_3_readdir_cbk, NULL, rsphdr, count,
256ebe
-                                NULL, 0, rsp_iobref,
256ebe
+                                client3_3_readdir_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfs3_readdir_req);
256ebe
 
256ebe
     if (ret) {
256ebe
@@ -5534,10 +5572,12 @@ client3_3_readdirp(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         {0},
256ebe
     };
256ebe
     clnt_local_t *local = NULL;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -5587,9 +5627,11 @@ client3_3_readdirp(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 
256ebe
     local->fd = fd_ref(args->fd);
256ebe
 
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = rsp_iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_READDIRP,
256ebe
-                                client3_3_readdirp_cbk, NULL, rsphdr, count,
256ebe
-                                NULL, 0, rsp_iobref,
256ebe
+                                client3_3_readdirp_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfs3_readdirp_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -5637,8 +5679,8 @@ client3_3_setattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_SETATTR,
256ebe
-                                client3_3_setattr_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_setattr_req);
256ebe
+                                client3_3_setattr_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_setattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5679,8 +5721,8 @@ client3_3_fsetattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FSETATTR,
256ebe
-                                client3_3_fsetattr_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_fsetattr_req);
256ebe
+                                client3_3_fsetattr_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_fsetattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5722,8 +5764,7 @@ client3_3_fallocate(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_FALLOCATE, client3_3_fallocate_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfs3_fallocate_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfs3_fallocate_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5764,8 +5805,8 @@ client3_3_discard(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_DISCARD,
256ebe
-                                client3_3_discard_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_discard_req);
256ebe
+                                client3_3_discard_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_discard_req);
256ebe
     if (ret)
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5807,8 +5848,8 @@ client3_3_zerofill(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_ZEROFILL,
256ebe
-                                client3_3_zerofill_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_zerofill_req);
256ebe
+                                client3_3_zerofill_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_zerofill_req);
256ebe
     if (ret)
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5850,7 +5891,7 @@ client3_3_ipc(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_IPC,
256ebe
-                                client3_3_ipc_cbk, NULL, NULL, 0, NULL, 0, NULL,
256ebe
+                                client3_3_ipc_cbk, NULL,
256ebe
                                 (xdrproc_t)xdr_gfs3_ipc_req);
256ebe
     if (ret)
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -5895,8 +5936,8 @@ client3_3_seek(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_SEEK,
256ebe
-                                client3_3_seek_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfs3_seek_req);
256ebe
+                                client3_3_seek_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfs3_seek_req);
256ebe
     if (ret)
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -6083,8 +6124,7 @@ client3_3_getactivelk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_GETACTIVELK, client3_3_getactivelk_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfs3_getactivelk_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfs3_getactivelk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -6141,8 +6181,7 @@ client3_3_setactivelk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_SETACTIVELK, client3_3_setactivelk_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfs3_setactivelk_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfs3_setactivelk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
diff --git a/xlators/protocol/client/src/client-rpc-fops_v2.c b/xlators/protocol/client/src/client-rpc-fops_v2.c
256ebe
index 8f3ee41..2673b6e 100644
256ebe
--- a/xlators/protocol/client/src/client-rpc-fops_v2.c
256ebe
+++ b/xlators/protocol/client/src/client-rpc-fops_v2.c
256ebe
@@ -3005,11 +3005,13 @@ client4_0_lookup(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     struct iobref *rsp_iobref = NULL;
256ebe
     struct iobuf *rsp_iobuf = NULL;
256ebe
     struct iovec *rsphdr = NULL;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
     memset(vector, 0, sizeof(vector));
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
 
256ebe
     conf = this->private;
256ebe
     args = data;
256ebe
@@ -3059,9 +3061,12 @@ client4_0_lookup(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         op_errno = -ret;
256ebe
         goto unwind;
256ebe
     }
256ebe
+
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = local->iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_LOOKUP,
256ebe
-                                client4_0_lookup_cbk, NULL, rsphdr, count, NULL,
256ebe
-                                0, local->iobref,
256ebe
+                                client4_0_lookup_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfx_lookup_req);
256ebe
 
256ebe
     if (ret) {
256ebe
@@ -3109,8 +3114,8 @@ client4_0_stat(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_STAT,
256ebe
-                                client4_0_stat_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_stat_req);
256ebe
+                                client4_0_stat_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_stat_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3153,8 +3158,8 @@ client4_0_truncate(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_TRUNCATE,
256ebe
-                                client4_0_truncate_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_truncate_req);
256ebe
+                                client4_0_truncate_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_truncate_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3198,8 +3203,7 @@ client4_0_ftruncate(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_FTRUNCATE, client4_0_ftruncate_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfx_ftruncate_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfx_ftruncate_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3241,8 +3245,8 @@ client4_0_access(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_ACCESS,
256ebe
-                                client4_0_access_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_access_req);
256ebe
+                                client4_0_access_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_access_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3295,8 +3299,8 @@ client4_0_readlink(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_READLINK,
256ebe
-                                client4_0_readlink_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_readlink_req);
256ebe
+                                client4_0_readlink_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_readlink_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3338,8 +3342,8 @@ client4_0_unlink(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_UNLINK,
256ebe
-                                client4_0_unlink_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_unlink_req);
256ebe
+                                client4_0_unlink_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_unlink_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3381,8 +3385,8 @@ client4_0_rmdir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_RMDIR,
256ebe
-                                client4_0_rmdir_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_rmdir_req);
256ebe
+                                client4_0_rmdir_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_rmdir_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3440,8 +3444,8 @@ client4_0_symlink(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_SYMLINK,
256ebe
-                                client4_0_symlink_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_symlink_req);
256ebe
+                                client4_0_symlink_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_symlink_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3486,8 +3490,8 @@ client4_0_rename(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_RENAME,
256ebe
-                                client4_0_rename_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_rename_req);
256ebe
+                                client4_0_rename_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_rename_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3546,8 +3550,8 @@ client4_0_link(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     loc_path(&local->loc2, NULL);
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_LINK,
256ebe
-                                client4_0_link_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_link_req);
256ebe
+                                client4_0_link_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_link_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3601,8 +3605,8 @@ client4_0_mknod(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_MKNOD,
256ebe
-                                client4_0_mknod_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_mknod_req);
256ebe
+                                client4_0_mknod_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_mknod_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3668,8 +3672,8 @@ client4_0_mkdir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_MKDIR,
256ebe
-                                client4_0_mkdir_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_mkdir_req);
256ebe
+                                client4_0_mkdir_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_mkdir_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3726,8 +3730,8 @@ client4_0_create(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_CREATE,
256ebe
-                                client4_0_create_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_create_req);
256ebe
+                                client4_0_create_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_create_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3787,8 +3791,8 @@ client4_0_open(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_OPEN,
256ebe
-                                client4_0_open_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_open_req);
256ebe
+                                client4_0_open_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_open_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3823,10 +3827,12 @@ client4_0_readv(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     };
256ebe
     struct iobuf *rsp_iobuf = NULL;
256ebe
     struct iobref *rsp_iobref = NULL;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -3872,9 +3878,12 @@ client4_0_readv(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
 
256ebe
+    cp.rsp_payload = &rsp_vec;
256ebe
+    cp.rsp_payload_cnt = 1;
256ebe
+    cp.rsp_iobref = local->iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_READ,
256ebe
-                                client4_0_readv_cbk, NULL, NULL, 0, &rsp_vec, 1,
256ebe
-                                local->iobref, (xdrproc_t)xdr_gfx_read_req);
256ebe
+                                client4_0_readv_cbk, &cp,
256ebe
+                                (xdrproc_t)xdr_gfx_read_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -3905,10 +3914,12 @@ client4_0_writev(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     };
256ebe
     int op_errno = ESTALE;
256ebe
     int ret = 0;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -3926,9 +3937,11 @@ client4_0_writev(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
 
256ebe
+    cp.iobref = args->iobref;
256ebe
+    cp.payload = args->vector;
256ebe
+    cp.payload_cnt = args->count;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_WRITE,
256ebe
-                                client4_0_writev_cbk, args->iobref,
256ebe
-                                args->vector, args->count, NULL, 0, NULL,
256ebe
+                                client4_0_writev_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfx_write_req);
256ebe
     if (ret) {
256ebe
         /*
256ebe
@@ -3987,8 +4000,8 @@ client4_0_flush(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FLUSH,
256ebe
-                                client4_0_flush_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_flush_req);
256ebe
+                                client4_0_flush_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_flush_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4030,8 +4043,8 @@ client4_0_fsync(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FSYNC,
256ebe
-                                client4_0_fsync_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_fsync_req);
256ebe
+                                client4_0_fsync_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_fsync_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4075,8 +4088,8 @@ client4_0_fstat(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FSTAT,
256ebe
-                                client4_0_fstat_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_fstat_req);
256ebe
+                                client4_0_fstat_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_fstat_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4130,8 +4143,8 @@ client4_0_opendir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_OPENDIR,
256ebe
-                                client4_0_opendir_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_opendir_req);
256ebe
+                                client4_0_opendir_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_opendir_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4175,8 +4188,8 @@ client4_0_fsyncdir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FSYNCDIR,
256ebe
-                                client4_0_fsyncdir_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_fsyncdir_req);
256ebe
+                                client4_0_fsyncdir_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_fsyncdir_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4219,8 +4232,8 @@ client4_0_statfs(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_STATFS,
256ebe
-                                client4_0_statfs_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_statfs_req);
256ebe
+                                client4_0_statfs_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_statfs_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4263,8 +4276,8 @@ client4_0_setxattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_SETXATTR,
256ebe
-                                client4_0_setxattr_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_setxattr_req);
256ebe
+                                client4_0_setxattr_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_setxattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4310,8 +4323,7 @@ client4_0_fsetxattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_FSETXATTR, client4_0_fsetxattr_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfx_fsetxattr_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfx_fsetxattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4364,8 +4376,7 @@ client4_0_fgetxattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_FGETXATTR, client4_0_fgetxattr_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfx_fgetxattr_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfx_fgetxattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4452,8 +4463,8 @@ client4_0_getxattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_GETXATTR,
256ebe
-                                client4_0_getxattr_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_getxattr_req);
256ebe
+                                client4_0_getxattr_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_getxattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4514,8 +4525,8 @@ client4_0_xattrop(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_XATTROP,
256ebe
-                                client4_0_xattrop_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_xattrop_req);
256ebe
+                                client4_0_xattrop_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_xattrop_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4566,8 +4577,8 @@ client4_0_fxattrop(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FXATTROP,
256ebe
-                                client4_0_fxattrop_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_fxattrop_req);
256ebe
+                                client4_0_fxattrop_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_fxattrop_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4613,8 +4624,7 @@ client4_0_removexattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_REMOVEXATTR, client4_0_removexattr_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfx_removexattr_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfx_removexattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4656,10 +4666,9 @@ client4_0_fremovexattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         op_errno = -ret;
256ebe
         goto unwind;
256ebe
     }
256ebe
-    ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
-                                GFS3_OP_FREMOVEXATTR,
256ebe
-                                client4_0_fremovexattr_cbk, NULL, NULL, 0, NULL,
256ebe
-                                0, NULL, (xdrproc_t)xdr_gfx_fremovexattr_req);
256ebe
+    ret = client_submit_request(
256ebe
+        this, &req, frame, conf->fops, GFS3_OP_FREMOVEXATTR,
256ebe
+        client4_0_fremovexattr_cbk, NULL, (xdrproc_t)xdr_gfx_fremovexattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4701,8 +4710,8 @@ client4_0_lease(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_LEASE,
256ebe
-                                client4_0_lease_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_lease_req);
256ebe
+                                client4_0_lease_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_lease_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4764,7 +4773,7 @@ client4_0_lk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_LK,
256ebe
-                                client4_0_lk_cbk, NULL, NULL, 0, NULL, 0, NULL,
256ebe
+                                client4_0_lk_cbk, NULL,
256ebe
                                 (xdrproc_t)xdr_gfx_lk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -4807,8 +4816,8 @@ client4_0_inodelk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_INODELK,
256ebe
-                                client4_0_inodelk_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_inodelk_req);
256ebe
+                                client4_0_inodelk_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_inodelk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4857,8 +4866,8 @@ client4_0_finodelk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FINODELK,
256ebe
-                                client4_0_finodelk_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_finodelk_req);
256ebe
+                                client4_0_finodelk_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_finodelk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4902,8 +4911,8 @@ client4_0_entrylk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_ENTRYLK,
256ebe
-                                client4_0_entrylk_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_entrylk_req);
256ebe
+                                client4_0_entrylk_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_entrylk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4946,8 +4955,8 @@ client4_0_fentrylk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FENTRYLK,
256ebe
-                                client4_0_fentrylk_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_fentrylk_req);
256ebe
+                                client4_0_fentrylk_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_fentrylk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -4988,10 +4997,12 @@ client4_0_readdir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         {0},
256ebe
     };
256ebe
     int readdir_rsp_size = 0;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -5041,9 +5052,11 @@ client4_0_readdir(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
 
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = rsp_iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_READDIR,
256ebe
-                                client4_0_readdir_cbk, NULL, rsphdr, count,
256ebe
-                                NULL, 0, rsp_iobref,
256ebe
+                                client4_0_readdir_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfx_readdir_req);
256ebe
 
256ebe
     if (ret) {
256ebe
@@ -5089,10 +5102,12 @@ client4_0_readdirp(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         {0},
256ebe
     };
256ebe
     clnt_local_t *local = NULL;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -5142,9 +5157,11 @@ client4_0_readdirp(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 
256ebe
     local->fd = fd_ref(args->fd);
256ebe
 
256ebe
+    cp.rsphdr = rsphdr;
256ebe
+    cp.rsphdr_cnt = count;
256ebe
+    cp.rsp_iobref = rsp_iobref;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_READDIRP,
256ebe
-                                client4_0_readdirp_cbk, NULL, rsphdr, count,
256ebe
-                                NULL, 0, rsp_iobref,
256ebe
+                                client4_0_readdirp_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfx_readdirp_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -5192,8 +5209,8 @@ client4_0_setattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_SETATTR,
256ebe
-                                client4_0_setattr_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_setattr_req);
256ebe
+                                client4_0_setattr_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_setattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5235,8 +5252,7 @@ client4_0_fallocate(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_FALLOCATE, client4_0_fallocate_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfx_fallocate_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfx_fallocate_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5277,8 +5293,8 @@ client4_0_discard(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_DISCARD,
256ebe
-                                client4_0_discard_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_discard_req);
256ebe
+                                client4_0_discard_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_discard_req);
256ebe
     if (ret)
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5320,8 +5336,8 @@ client4_0_zerofill(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_ZEROFILL,
256ebe
-                                client4_0_zerofill_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_zerofill_req);
256ebe
+                                client4_0_zerofill_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_zerofill_req);
256ebe
     if (ret)
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5363,7 +5379,7 @@ client4_0_ipc(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_IPC,
256ebe
-                                client4_0_ipc_cbk, NULL, NULL, 0, NULL, 0, NULL,
256ebe
+                                client4_0_ipc_cbk, NULL,
256ebe
                                 (xdrproc_t)xdr_gfx_ipc_req);
256ebe
     if (ret)
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
@@ -5408,8 +5424,8 @@ client4_0_seek(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     }
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_SEEK,
256ebe
-                                client4_0_seek_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_seek_req);
256ebe
+                                client4_0_seek_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_seek_req);
256ebe
     if (ret)
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5458,8 +5474,7 @@ client4_0_getactivelk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_GETACTIVELK, client4_0_getactivelk_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfx_getactivelk_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfx_getactivelk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5514,8 +5529,7 @@ client4_0_setactivelk(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
                                 GFS3_OP_SETACTIVELK, client4_0_setactivelk_cbk,
256ebe
-                                NULL, NULL, 0, NULL, 0, NULL,
256ebe
-                                (xdrproc_t)xdr_gfx_setactivelk_req);
256ebe
+                                NULL, (xdrproc_t)xdr_gfx_setactivelk_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5785,8 +5799,8 @@ client4_0_namelink(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 
256ebe
     dict_to_xdr(args->xdata, &req.xdata);
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_NAMELINK,
256ebe
-                                client4_namelink_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_namelink_req);
256ebe
+                                client4_namelink_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_namelink_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -5837,8 +5851,8 @@ client4_0_icreate(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     op_errno = ESTALE;
256ebe
     dict_to_xdr(args->xdata, &req.xdata);
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_ICREATE,
256ebe
-                                client4_icreate_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_icreate_req);
256ebe
+                                client4_icreate_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_icreate_req);
256ebe
     if (ret)
256ebe
         goto free_reqdata;
256ebe
     GF_FREE(req.xdata.pairs.pairs_val);
256ebe
@@ -5864,10 +5878,12 @@ client4_0_put(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     int op_errno = ESTALE;
256ebe
     int ret = 0;
256ebe
     clnt_local_t *local = NULL;
256ebe
+    client_payload_t cp;
256ebe
 
256ebe
     if (!frame || !this || !data)
256ebe
         goto unwind;
256ebe
 
256ebe
+    memset(&cp, 0, sizeof(client_payload_t));
256ebe
     args = data;
256ebe
     conf = this->private;
256ebe
 
256ebe
@@ -5890,9 +5906,11 @@ client4_0_put(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
 
256ebe
+    cp.iobref = args->iobref;
256ebe
+    cp.payload = args->vector;
256ebe
+    cp.payload_cnt = args->count;
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_PUT,
256ebe
-                                client4_0_put_cbk, args->iobref, args->vector,
256ebe
-                                args->count, NULL, 0, NULL,
256ebe
+                                client4_0_put_cbk, &cp,
256ebe
                                 (xdrproc_t)xdr_gfx_put_req);
256ebe
     if (ret) {
256ebe
         /*
256ebe
@@ -5959,10 +5977,10 @@ client4_0_copy_file_range(call_frame_t *frame, xlator_t *this, void *data)
256ebe
     local->attempt_reopen_out = client_is_reopen_needed(args->fd_out, this,
256ebe
                                                         req.fd_out);
256ebe
 
256ebe
-    ret = client_submit_request(
256ebe
-        this, &req, frame, conf->fops, GFS3_OP_COPY_FILE_RANGE,
256ebe
-        client4_0_copy_file_range_cbk, NULL, NULL, 0, NULL, 0, NULL,
256ebe
-        (xdrproc_t)xdr_gfx_copy_file_range_req);
256ebe
+    ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
+                                GFS3_OP_COPY_FILE_RANGE,
256ebe
+                                client4_0_copy_file_range_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_copy_file_range_req);
256ebe
     if (ret) {
256ebe
         /*
256ebe
          * If the lower layers fail to submit a request, they'll also
256ebe
@@ -6009,8 +6027,8 @@ client4_0_fsetattr(call_frame_t *frame, xlator_t *this, void *data)
256ebe
         goto unwind;
256ebe
     }
256ebe
     ret = client_submit_request(this, &req, frame, conf->fops, GFS3_OP_FSETATTR,
256ebe
-                                client4_0_fsetattr_cbk, NULL, NULL, 0, NULL, 0,
256ebe
-                                NULL, (xdrproc_t)xdr_gfx_fsetattr_req);
256ebe
+                                client4_0_fsetattr_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_fsetattr_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
@@ -6054,9 +6072,9 @@ client4_0_rchecksum(call_frame_t *frame, xlator_t *this, void *data)
256ebe
 
256ebe
     dict_to_xdr(args->xdata, &req.xdata);
256ebe
 
256ebe
-    ret = client_submit_request(
256ebe
-        this, &req, frame, conf->fops, GFS3_OP_RCHECKSUM, client4_rchecksum_cbk,
256ebe
-        NULL, NULL, 0, NULL, 0, NULL, (xdrproc_t)xdr_gfx_rchecksum_req);
256ebe
+    ret = client_submit_request(this, &req, frame, conf->fops,
256ebe
+                                GFS3_OP_RCHECKSUM, client4_rchecksum_cbk, NULL,
256ebe
+                                (xdrproc_t)xdr_gfx_rchecksum_req);
256ebe
     if (ret) {
256ebe
         gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FOP_SEND_FAILED,
256ebe
                "failed to send the fop");
256ebe
diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c
256ebe
index dea6c28..2d75714 100644
256ebe
--- a/xlators/protocol/client/src/client.c
256ebe
+++ b/xlators/protocol/client/src/client.c
256ebe
@@ -131,10 +131,7 @@ client_type_to_gf_type(short l_type)
256ebe
 int
256ebe
 client_submit_request(xlator_t *this, void *req, call_frame_t *frame,
256ebe
                       rpc_clnt_prog_t *prog, int procnum, fop_cbk_fn_t cbkfn,
256ebe
-                      struct iobref *iobref, struct iovec *payload,
256ebe
-                      int payloadcnt, struct iovec *rsp_payload,
256ebe
-                      int rsp_payload_count, struct iobref *rsp_iobref,
256ebe
-                      xdrproc_t xdrproc)
256ebe
+                      client_payload_t *cp, xdrproc_t xdrproc)
256ebe
 {
256ebe
     int ret = -1;
256ebe
     clnt_conf_t *conf = NULL;
256ebe
@@ -180,8 +177,8 @@ client_submit_request(xlator_t *this, void *req, call_frame_t *frame,
256ebe
             goto out;
256ebe
         }
256ebe
 
256ebe
-        if (iobref != NULL) {
256ebe
-            ret = iobref_merge(new_iobref, iobref);
256ebe
+        if (cp && cp->iobref != NULL) {
256ebe
+            ret = iobref_merge(new_iobref, cp->iobref);
256ebe
             if (ret != 0) {
256ebe
                 gf_msg(this->name, GF_LOG_WARNING, ENOMEM, PC_MSG_NO_MEMORY,
256ebe
                        "cannot merge "
256ebe
@@ -224,9 +221,16 @@ client_submit_request(xlator_t *this, void *req, call_frame_t *frame,
256ebe
     }
256ebe
 
256ebe
     /* Send the msg */
256ebe
-    ret = rpc_clnt_submit(conf->rpc, prog, procnum, cbkfn, &iov, count, payload,
256ebe
-                          payloadcnt, new_iobref, frame, payload, payloadcnt,
256ebe
-                          rsp_payload, rsp_payload_count, rsp_iobref);
256ebe
+    if (cp) {
256ebe
+        ret = rpc_clnt_submit(conf->rpc, prog, procnum, cbkfn, &iov, count,
256ebe
+                              cp->payload, cp->payload_cnt, new_iobref, frame,
256ebe
+                              cp->rsphdr, cp->rsphdr_cnt, cp->rsp_payload,
256ebe
+                              cp->rsp_payload_cnt, cp->rsp_iobref);
256ebe
+    } else {
256ebe
+        ret = rpc_clnt_submit(conf->rpc, prog, procnum, cbkfn, &iov, count,
256ebe
+                              NULL, 0, new_iobref, frame, NULL, 0, NULL, 0,
256ebe
+                              NULL);
256ebe
+    }
256ebe
 
256ebe
     if (ret < 0) {
256ebe
         gf_msg_debug(this->name, 0, "rpc_clnt_submit failed");
256ebe
diff --git a/xlators/protocol/client/src/client.h b/xlators/protocol/client/src/client.h
256ebe
index 71f84f3..f12fa61 100644
256ebe
--- a/xlators/protocol/client/src/client.h
256ebe
+++ b/xlators/protocol/client/src/client.h
256ebe
@@ -345,6 +345,17 @@ typedef struct client_args {
256ebe
     lock_migration_info_t *locklist;
256ebe
 } clnt_args_t;
256ebe
 
256ebe
+typedef struct client_payload {
256ebe
+    struct iobref *iobref;
256ebe
+    struct iovec *payload;
256ebe
+    struct iovec *rsphdr;
256ebe
+    struct iovec *rsp_payload;
256ebe
+    struct iobref *rsp_iobref;
256ebe
+    int payload_cnt;
256ebe
+    int rsphdr_cnt;
256ebe
+    int rsp_payload_cnt;
256ebe
+} client_payload_t;
256ebe
+
256ebe
 typedef ssize_t (*gfs_serialize_t)(struct iovec outmsg, void *args);
256ebe
 
256ebe
 clnt_fd_ctx_t *
256ebe
@@ -359,10 +370,7 @@ client_local_wipe(clnt_local_t *local);
256ebe
 int
256ebe
 client_submit_request(xlator_t *this, void *req, call_frame_t *frame,
256ebe
                       rpc_clnt_prog_t *prog, int procnum, fop_cbk_fn_t cbk,
256ebe
-                      struct iobref *iobref, struct iovec *rsphdr,
256ebe
-                      int rsphdr_count, struct iovec *rsp_payload,
256ebe
-                      int rsp_count, struct iobref *rsp_iobref,
256ebe
-                      xdrproc_t xdrproc);
256ebe
+                      client_payload_t *cp, xdrproc_t xdrproc);
256ebe
 
256ebe
 int
256ebe
 client_submit_compound_request(xlator_t *this, void *req, call_frame_t *frame,
256ebe
-- 
256ebe
1.8.3.1
256ebe