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