summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c
diff options
context:
space:
mode:
authorYaniv Kaul <ykaul@redhat.com>2019-07-30 10:15:42 +0300
committerAtin Mukherjee <amukherj@redhat.com>2019-08-05 03:08:13 +0000
commit2aeb9fb17087434d87497a85077073ea3bf94869 (patch)
tree3625e683a27b8719ee97d89702815c89b6c5d2e4 /xlators/mgmt/glusterd/src/glusterd-rpc-ops.c
parent2dd43d3e5b5305db3a5ecafabdd9cf8e7775ec75 (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.c12
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;