diff options
Diffstat (limited to '0535-multiple-files-use-dict_allocate_and_serialize-where.patch')
-rw-r--r-- | 0535-multiple-files-use-dict_allocate_and_serialize-where.patch | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/0535-multiple-files-use-dict_allocate_and_serialize-where.patch b/0535-multiple-files-use-dict_allocate_and_serialize-where.patch new file mode 100644 index 0000000..e1622de --- /dev/null +++ b/0535-multiple-files-use-dict_allocate_and_serialize-where.patch @@ -0,0 +1,270 @@ +From 775d500cd136bd8c940faaeffde1217c25a87e3d Mon Sep 17 00:00:00 2001 +From: Yaniv Kaul <ykaul@redhat.com> +Date: Sun, 2 Jun 2019 21:14:18 +0300 +Subject: [PATCH 535/538] (multiple files) use dict_allocate_and_serialize() + where applicable. + +This function does length, allocation and serialization for you. + +Upstream patch: +> Upstream-patch-link: https://review.gluster.org/#/c/glusterfs/+/22800 +> Change-Id: I142a259952a2fe83dd719442afaefe4a43a8e55e +> updates: bz#1193929 +> Signed-off-by: Yaniv Kaul <ykaul@redhat.com> + +Change-Id: I142a259952a2fe83dd719442afaefe4a43a8e55e +BUG: 1911292 +Signed-off-by: Yaniv Kaul <ykaul@redhat.com> +Reviewed-on: https://code.engineering.redhat.com/gerrit/228611 +Tested-by: RHGS Build Bot <nigelb@redhat.com> +Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com> +--- + xlators/cluster/afr/src/afr-inode-read.c | 34 +++++--------------------- + xlators/cluster/ec/src/ec-combine.c | 16 +++--------- + xlators/features/locks/src/posix.c | 23 +++-------------- + xlators/protocol/client/src/client-handshake.c | 14 +++-------- + xlators/protocol/server/src/server-handshake.c | 24 +++++++----------- + xlators/protocol/server/src/server-helpers.c | 27 +++----------------- + 6 files changed, 28 insertions(+), 110 deletions(-) + +diff --git a/xlators/cluster/afr/src/afr-inode-read.c b/xlators/cluster/afr/src/afr-inode-read.c +index 523a5b4..cf305af 100644 +--- a/xlators/cluster/afr/src/afr-inode-read.c ++++ b/xlators/cluster/afr/src/afr-inode-read.c +@@ -948,24 +948,13 @@ unlock: + goto unwind; + } + +- len = dict_serialized_length(local->dict); +- if (len <= 0) { +- goto unwind; +- } +- +- lockinfo_buf = GF_CALLOC(1, len, gf_common_mt_char); +- if (!lockinfo_buf) { ++ op_ret = dict_allocate_and_serialize( ++ local->dict, (char **)&lockinfo_buf, (unsigned int *)&len); ++ if (op_ret != 0) { + local->op_ret = -1; +- local->op_errno = ENOMEM; + goto unwind; + } + +- op_ret = dict_serialize(local->dict, lockinfo_buf); +- if (op_ret < 0) { +- local->op_ret = -1; +- local->op_errno = -op_ret; +- } +- + op_ret = dict_set_dynptr(newdict, GF_XATTR_LOCKINFO_KEY, + (void *)lockinfo_buf, len); + if (op_ret < 0) { +@@ -1064,24 +1053,13 @@ unlock: + goto unwind; + } + +- len = dict_serialized_length(local->dict); +- if (len <= 0) { +- goto unwind; +- } +- +- lockinfo_buf = GF_CALLOC(1, len, gf_common_mt_char); +- if (!lockinfo_buf) { ++ op_ret = dict_allocate_and_serialize( ++ local->dict, (char **)&lockinfo_buf, (unsigned int *)&len); ++ if (op_ret != 0) { + local->op_ret = -1; +- local->op_errno = ENOMEM; + goto unwind; + } + +- op_ret = dict_serialize(local->dict, lockinfo_buf); +- if (op_ret < 0) { +- local->op_ret = -1; +- local->op_errno = -op_ret; +- } +- + op_ret = dict_set_dynptr(newdict, GF_XATTR_LOCKINFO_KEY, + (void *)lockinfo_buf, len); + if (op_ret < 0) { +diff --git a/xlators/cluster/ec/src/ec-combine.c b/xlators/cluster/ec/src/ec-combine.c +index 99e5534..9d712b3 100644 +--- a/xlators/cluster/ec/src/ec-combine.c ++++ b/xlators/cluster/ec/src/ec-combine.c +@@ -486,22 +486,12 @@ ec_dict_data_merge(ec_cbk_data_t *cbk, int32_t which, char *key) + + tmp = NULL; + +- len = dict_serialized_length(lockinfo); +- if (len < 0) { +- err = len; +- +- goto out; +- } +- ptr = GF_MALLOC(len, gf_common_mt_char); +- if (ptr == NULL) { +- err = -ENOMEM; +- +- goto out; +- } +- err = dict_serialize(lockinfo, ptr); ++ err = dict_allocate_and_serialize(lockinfo, (char **)&ptr, ++ (unsigned int *)&len); + if (err != 0) { + goto out; + } ++ + dict = (which == EC_COMBINE_XDATA) ? cbk->xdata : cbk->dict; + err = dict_set_dynptr(dict, key, ptr, len); + if (err != 0) { +diff --git a/xlators/features/locks/src/posix.c b/xlators/features/locks/src/posix.c +index 5ae0125..cdd1ff7 100644 +--- a/xlators/features/locks/src/posix.c ++++ b/xlators/features/locks/src/posix.c +@@ -1547,8 +1547,9 @@ pl_fgetxattr_handle_lockinfo(xlator_t *this, fd_t *fd, dict_t *dict, + goto out; + } + +- len = dict_serialized_length(tmp); +- if (len < 0) { ++ op_ret = dict_allocate_and_serialize(tmp, (char **)&buf, ++ (unsigned int *)&len); ++ if (op_ret != 0) { + *op_errno = -op_ret; + op_ret = -1; + gf_log(this->name, GF_LOG_WARNING, +@@ -1558,24 +1559,6 @@ pl_fgetxattr_handle_lockinfo(xlator_t *this, fd_t *fd, dict_t *dict, + goto out; + } + +- buf = GF_CALLOC(1, len, gf_common_mt_char); +- if (buf == NULL) { +- op_ret = -1; +- *op_errno = ENOMEM; +- goto out; +- } +- +- op_ret = dict_serialize(tmp, buf); +- if (op_ret < 0) { +- *op_errno = -op_ret; +- op_ret = -1; +- gf_log(this->name, GF_LOG_WARNING, +- "dict_serialize failed (%s) while handling lockinfo " +- "for fd (ptr: %p inode-gfid:%s)", +- strerror(*op_errno), fd, uuid_utoa(fd->inode->gfid)); +- goto out; +- } +- + op_ret = dict_set_dynptr(dict, GF_XATTR_LOCKINFO_KEY, buf, len); + if (op_ret < 0) { + *op_errno = -op_ret; +diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c +index 0002361..6b20d92 100644 +--- a/xlators/protocol/client/src/client-handshake.c ++++ b/xlators/protocol/client/src/client-handshake.c +@@ -1286,18 +1286,10 @@ client_setvolume(xlator_t *this, struct rpc_clnt *rpc) + "Failed to set client opversion in handshake message"); + } + +- ret = dict_serialized_length(options); +- if (ret < 0) { +- gf_msg(this->name, GF_LOG_ERROR, 0, PC_MSG_DICT_ERROR, +- "failed to get serialized length of dict"); ++ ret = dict_allocate_and_serialize(options, (char **)&req.dict.dict_val, ++ &req.dict.dict_len); ++ if (ret != 0) { + ret = -1; +- goto fail; +- } +- req.dict.dict_len = ret; +- req.dict.dict_val = GF_CALLOC(1, req.dict.dict_len, +- gf_client_mt_clnt_req_buf_t); +- ret = dict_serialize(options, req.dict.dict_val); +- if (ret < 0) { + gf_msg(this->name, GF_LOG_ERROR, 0, PC_MSG_DICT_SERIALIZE_FAIL, + "failed to serialize " + "dictionary"); +diff --git a/xlators/protocol/server/src/server-handshake.c b/xlators/protocol/server/src/server-handshake.c +index eeca73c..54dc030 100644 +--- a/xlators/protocol/server/src/server-handshake.c ++++ b/xlators/protocol/server/src/server-handshake.c +@@ -676,22 +676,16 @@ fail: + GF_ASSERT(rsp); + + rsp->op_ret = 0; +- ret = dict_serialized_length(reply); +- if (ret > 0) { +- rsp->dict.dict_len = ret; +- rsp->dict.dict_val = GF_CALLOC(1, rsp->dict.dict_len, +- gf_server_mt_rsp_buf_t); +- if (rsp->dict.dict_val) { +- ret = dict_serialize(reply, rsp->dict.dict_val); +- if (ret < 0) { +- gf_msg_debug("server-handshake", 0, +- "failed " +- "to serialize reply dict"); +- op_ret = -1; +- op_errno = -ret; +- } +- } ++ ++ ret = dict_allocate_and_serialize(reply, (char **)&rsp->dict.dict_val, ++ &rsp->dict.dict_len); ++ if (ret != 0) { ++ ret = -1; ++ gf_msg_debug("server-handshake", 0, "failed to serialize reply dict"); ++ op_ret = -1; ++ op_errno = -ret; + } ++ + rsp->op_ret = op_ret; + rsp->op_errno = gf_errno_to_error(op_errno); + +diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c +index e74a24d..33959b5 100644 +--- a/xlators/protocol/server/src/server-helpers.c ++++ b/xlators/protocol/server/src/server-helpers.c +@@ -902,7 +902,6 @@ serialize_rsp_direntp(gf_dirent_t *entries, gfs3_readdirp_rsp *rsp) + gfs3_dirplist *trav = NULL; + gfs3_dirplist *prev = NULL; + int ret = -1; +- int temp = 0; + + GF_VALIDATE_OR_GOTO("server", entries, out); + GF_VALIDATE_OR_GOTO("server", rsp, out); +@@ -923,28 +922,10 @@ serialize_rsp_direntp(gf_dirent_t *entries, gfs3_readdirp_rsp *rsp) + + /* if 'dict' is present, pack it */ + if (entry->dict) { +- temp = dict_serialized_length(entry->dict); +- +- if (temp < 0) { +- gf_msg(THIS->name, GF_LOG_ERROR, EINVAL, PS_MSG_INVALID_ENTRY, +- "failed to get " +- "serialized length of reply dict"); +- errno = EINVAL; +- trav->dict.dict_len = 0; +- goto out; +- } +- trav->dict.dict_len = temp; +- +- trav->dict.dict_val = GF_CALLOC(1, trav->dict.dict_len, +- gf_server_mt_rsp_buf_t); +- if (!trav->dict.dict_val) { +- errno = ENOMEM; +- trav->dict.dict_len = 0; +- goto out; +- } +- +- ret = dict_serialize(entry->dict, trav->dict.dict_val); +- if (ret < 0) { ++ ret = dict_allocate_and_serialize(entry->dict, ++ (char **)&trav->dict.dict_val, ++ &trav->dict.dict_len); ++ if (ret != 0) { + gf_msg(THIS->name, GF_LOG_ERROR, 0, PS_MSG_DICT_SERIALIZE_FAIL, + "failed to serialize reply dict"); + errno = -ret; +-- +1.8.3.1 + |