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