diff options
author | Yaniv Kaul <ykaul@redhat.com> | 2019-07-30 10:15:42 +0300 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2019-08-05 03:08:13 +0000 |
commit | 2aeb9fb17087434d87497a85077073ea3bf94869 (patch) | |
tree | 3625e683a27b8719ee97d89702815c89b6c5d2e4 /xlators/mgmt/glusterd/src/glusterd-rpc-ops.c | |
parent | 2dd43d3e5b5305db3a5ecafabdd9cf8e7775ec75 (diff) |
multiple files: reduce minor work under RCU_READ_LOCK
1. Try to unlock faster - in error paths.
2. Remove memory allocations - do them before the lock.
Change-Id: I1e9ddd80b99de45ad0f557d62a5f28951dfd54c8
updates: bz#1193929
Signed-off-by: Yaniv Kaul <ykaul@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-rpc-ops.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rpc-ops.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c index 95b68f0b506..a8e35f32a15 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c @@ -275,11 +275,12 @@ __glusterd_probe_cbk(struct rpc_req *req, struct iovec *iov, int count, RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find(rsp.uuid, rsp.hostname); if (peerinfo == NULL) { + RCU_READ_UNLOCK ret = -1; gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_PEER_NOT_FOUND, "Could not find peerd %s(%s)", rsp.hostname, uuid_utoa(rsp.uuid)); - goto unlock; + goto out; } /* @@ -393,9 +394,10 @@ cont: ret = glusterd_friend_sm_new_event(GD_FRIEND_EVENT_INIT_FRIEND_REQ, &event); if (ret) { + RCU_READ_UNLOCK; gf_msg("glusterd", GF_LOG_ERROR, 0, GD_MSG_NEW_FRIEND_SM_EVENT_GET_FAIL, "Unable to get event"); - goto unlock; + goto out; } event->peername = gf_strdup(peerinfo->hostname); @@ -477,12 +479,13 @@ __glusterd_friend_add_cbk(struct rpc_req *req, struct iovec *iov, int count, peerinfo = glusterd_peerinfo_find(rsp.uuid, rsp.hostname); if (peerinfo == NULL) { + RCU_READ_UNLOCK ret = -1; gf_msg("glusterd", GF_LOG_ERROR, 0, GD_MSG_RESP_FROM_UNKNOWN_PEER, "received friend add response from" " unknown peer uuid: %s", uuid_utoa(rsp.uuid)); - goto unlock; + goto out; } if (op_ret) @@ -1528,12 +1531,13 @@ glusterd_rpc_friend_add(call_frame_t *frame, xlator_t *this, void *data) goto out; } - gf_uuid_copy(req.uuid, MY_UUID); req.hostname = gf_strdup(peerinfo->hostname); req.port = peerinfo->port; RCU_READ_UNLOCK; + gf_uuid_copy(req.uuid, MY_UUID); + peer_data = dict_new(); if (!peer_data) { errno = ENOMEM; |