From c0d88596bda4eb5c7e942e621a7d38c7ae6d737a Mon Sep 17 00:00:00 2001 From: Sanju Rakonde Date: Wed, 28 Nov 2018 16:13:58 +0530 Subject: [PATCH 477/493] glusterd: perform rcu_read_lock/unlock() under cleanup_lock mutex Problem: glusterd should not try to acquire locks on any resources, when it already received a SIGTERM and cleanup is started. Otherwise we might hit segfault, since the thread which is going through cleanup path will be freeing up the resouces and some other thread might be trying to acquire locks on freed resources. Solution: perform rcu_read_lock/unlock() under cleanup_lock mutex. > fixes: bz#1654270 > Change-Id: I87a97cfe4f272f74f246d688660934638911ce54 > Signed-off-by: Sanju Rakonde upstream patch: https://review.gluster.org/#/c/glusterfs/+/21743/ Change-Id: I87a97cfe4f272f74f246d688660934638911ce54 BUG: 1654161 Signed-off-by: Sanju Rakonde Reviewed-on: https://code.engineering.redhat.com/gerrit/158647 Tested-by: RHGS Build Bot Reviewed-by: Atin Mukherjee --- xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 8 +-- xlators/mgmt/glusterd/src/glusterd-handler.c | 75 +++++++++++----------- xlators/mgmt/glusterd/src/glusterd-handshake.c | 32 ++++----- xlators/mgmt/glusterd/src/glusterd-mgmt.c | 28 ++++---- xlators/mgmt/glusterd/src/glusterd-op-sm.c | 30 ++++----- xlators/mgmt/glusterd/src/glusterd-peer-utils.c | 40 ++++++------ xlators/mgmt/glusterd/src/glusterd-replace-brick.c | 4 +- xlators/mgmt/glusterd/src/glusterd-reset-brick.c | 4 +- xlators/mgmt/glusterd/src/glusterd-rpc-ops.c | 48 +++++++------- xlators/mgmt/glusterd/src/glusterd-server-quorum.c | 4 +- xlators/mgmt/glusterd/src/glusterd-sm.c | 64 +++++++++--------- xlators/mgmt/glusterd/src/glusterd-snapshot.c | 6 +- xlators/mgmt/glusterd/src/glusterd-store.c | 4 +- xlators/mgmt/glusterd/src/glusterd-syncop.c | 40 ++++++------ xlators/mgmt/glusterd/src/glusterd-utils.c | 8 +-- xlators/mgmt/glusterd/src/glusterd.h | 20 +++++- 16 files changed, 215 insertions(+), 200 deletions(-) diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c index 416412e..5ad8ab8 100644 --- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c @@ -2097,7 +2097,7 @@ check: continue; } - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_uuid (brickinfo->uuid); if (!peerinfo) { @@ -2105,7 +2105,7 @@ check: "brick %s is not in cluster", brick); *errstr = gf_strdup (msg); ret = -1; - rcu_read_unlock (); + RCU_READ_UNLOCK; goto out; } if (!peerinfo->connected) { @@ -2113,10 +2113,10 @@ check: "brick %s is down", brick); *errstr = gf_strdup (msg); ret = -1; - rcu_read_unlock (); + RCU_READ_UNLOCK; goto out; } - rcu_read_unlock (); + RCU_READ_UNLOCK; } out: diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index c71bf3c..d40de89 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -105,7 +105,7 @@ glusterd_handle_friend_req (rpcsvc_request_t *req, uuid_t uuid, ret = glusterd_remote_hostname_get (req, rhost, sizeof (rhost)); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (uuid, rhost); @@ -179,7 +179,7 @@ glusterd_handle_friend_req (rpcsvc_request_t *req, uuid_t uuid, ret = GLUSTERD_CONNECTION_AWAITED; out: - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret && (ret != GLUSTERD_CONNECTION_AWAITED)) { if (ctx && ctx->hostname) @@ -198,7 +198,6 @@ out: GF_FREE (event); } - return ret; } @@ -214,7 +213,7 @@ glusterd_handle_unfriend_req (rpcsvc_request_t *req, uuid_t uuid, if (!port) port = GF_DEFAULT_BASE_PORT; - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (uuid, hostname); @@ -269,7 +268,7 @@ glusterd_handle_unfriend_req (rpcsvc_request_t *req, uuid_t uuid, ret = 0; out: - rcu_read_unlock (); + RCU_READ_UNLOCK; if (0 != ret) { if (ctx && ctx->hostname) @@ -902,9 +901,9 @@ __glusterd_handle_cluster_lock (rpcsvc_request_t *req) gf_msg_debug (this->name, 0, "Received LOCK from uuid: %s", uuid_utoa (lock_req.uuid)); - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find_by_uuid (lock_req.uuid) == NULL); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg (this->name, GF_LOG_WARNING, 0, GD_MSG_PEER_NOT_FOUND, "%s doesn't " @@ -1060,9 +1059,9 @@ __glusterd_handle_stage_op (rpcsvc_request_t *req) gf_msg_debug (this->name, 0, "transaction ID = %s", uuid_utoa (*txn_id)); - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find_by_uuid (op_req.uuid) == NULL); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg (this->name, GF_LOG_WARNING, 0, GD_MSG_PEER_NOT_FOUND, "%s doesn't " @@ -1144,9 +1143,9 @@ __glusterd_handle_commit_op (rpcsvc_request_t *req) goto out; } - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find_by_uuid (op_req.uuid) == NULL); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg (this->name, GF_LOG_WARNING, 0, GD_MSG_PEER_NOT_FOUND, "%s doesn't " @@ -1270,12 +1269,12 @@ __glusterd_handle_cli_probe (rpcsvc_request_t *req) goto out; } - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_hostname (hostname); ret = (peerinfo && gd_peer_has_address (peerinfo, hostname)); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg_debug ("glusterd", 0, "Probe host %s port %d " @@ -2329,7 +2328,7 @@ __glusterd_handle_fsm_log (rpcsvc_request_t *req) conf = this->private; ret = glusterd_sm_tr_log_add_to_dict (dict, &conf->op_sm_log); } else { - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_hostname (cli_req.name); if (!peerinfo) { @@ -2341,7 +2340,7 @@ __glusterd_handle_fsm_log (rpcsvc_request_t *req) (dict, &peerinfo->sm_log); } - rcu_read_unlock (); + RCU_READ_UNLOCK; } out: @@ -2482,9 +2481,9 @@ __glusterd_handle_cluster_unlock (rpcsvc_request_t *req) gf_msg_debug (this->name, 0, "Received UNLOCK from uuid: %s", uuid_utoa (unlock_req.uuid)); - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find_by_uuid (unlock_req.uuid) == NULL); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg (this->name, GF_LOG_WARNING, 0, GD_MSG_PEER_NOT_FOUND, "%s doesn't " @@ -2786,11 +2785,11 @@ __glusterd_handle_friend_update (rpcsvc_request_t *req) } ret = 0; - rcu_read_lock (); + RCU_READ_LOCK; if (glusterd_peerinfo_find (friend_req.uuid, NULL) == NULL) { ret = -1; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg (this->name, GF_LOG_CRITICAL, 0, GD_MSG_REQ_FROM_UNKNOWN_PEER, @@ -2856,7 +2855,7 @@ __glusterd_handle_friend_update (rpcsvc_request_t *req) memset (key, 0, sizeof (key)); snprintf (key, sizeof (key), "friend%d", i); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (uuid, NULL); if (peerinfo == NULL) { /* Create a new peer and add it to the list as there is @@ -2903,7 +2902,7 @@ __glusterd_handle_friend_update (rpcsvc_request_t *req) } } unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) break; @@ -3002,7 +3001,7 @@ __glusterd_handle_probe_query (rpcsvc_request_t *req) goto out; } - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (probe_req.uuid, remote_hostname); if ((peerinfo == NULL) && (!cds_list_empty (&conf->peers))) { rsp.op_ret = -1; @@ -3024,7 +3023,7 @@ __glusterd_handle_probe_query (rpcsvc_request_t *req) rsp.op_errno = GF_PROBE_ADD_FAILED; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; respond: gf_uuid_copy (rsp.uuid, MY_UUID); @@ -3370,11 +3369,11 @@ glusterd_friend_remove (uuid_t uuid, char *hostname) int ret = -1; glusterd_peerinfo_t *peerinfo = NULL; - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (uuid, hostname); if (peerinfo == NULL) { - rcu_read_unlock (); + RCU_READ_UNLOCK; goto out; } @@ -3382,7 +3381,7 @@ glusterd_friend_remove (uuid_t uuid, char *hostname) if (ret) gf_msg (THIS->name, GF_LOG_WARNING, 0, GD_MSG_VOL_CLEANUP_FAIL, "Volumes cleanup failed"); - rcu_read_unlock (); + RCU_READ_UNLOCK; /* Giving up the critical section here as glusterd_peerinfo_cleanup must * be called from outside a critical section */ @@ -3715,7 +3714,7 @@ glusterd_probe_begin (rpcsvc_request_t *req, const char *hoststr, int port, GF_ASSERT (hoststr); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (NULL, hoststr); if (peerinfo == NULL) { @@ -3763,7 +3762,7 @@ glusterd_probe_begin (rpcsvc_request_t *req, const char *hoststr, int port, } out: - rcu_read_unlock (); + RCU_READ_UNLOCK; gf_msg_debug ("glusterd", 0, "returning %d", ret); return ret; } @@ -3780,7 +3779,7 @@ glusterd_deprobe_begin (rpcsvc_request_t *req, const char *hoststr, int port, GF_ASSERT (hoststr); GF_ASSERT (req); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (uuid, hoststr); if (peerinfo == NULL) { @@ -3840,7 +3839,7 @@ glusterd_deprobe_begin (rpcsvc_request_t *req, const char *hoststr, int port, peerinfo->detaching = _gf_true; out: - rcu_read_unlock (); + RCU_READ_UNLOCK; return ret; } @@ -4162,7 +4161,7 @@ glusterd_list_friends (rpcsvc_request_t *req, dict_t *dict, int32_t flags) /* Reset ret to 0, needed to prevent failure incase no peers exist */ ret = 0; - rcu_read_lock (); + RCU_READ_LOCK; if (!cds_list_empty (&priv->peers)) { cds_list_for_each_entry_rcu (entry, &priv->peers, uuid_list) { count++; @@ -4173,7 +4172,7 @@ glusterd_list_friends (rpcsvc_request_t *req, dict_t *dict, int32_t flags) } } unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) goto out; @@ -5592,7 +5591,7 @@ glusterd_get_state (rpcsvc_request_t *req, dict_t *dict) if (priv->opts) dict_foreach (priv->opts, glusterd_print_global_options, fp); - rcu_read_lock (); + RCU_READ_LOCK; fprintf (fp, "\n[Peers]\n"); cds_list_for_each_entry_rcu (peerinfo, &priv->peers, uuid_list) { @@ -5621,7 +5620,7 @@ glusterd_get_state (rpcsvc_request_t *req, dict_t *dict) count_bkp = 0; fprintf (fp, "\n"); } - rcu_read_unlock (); + RCU_READ_UNLOCK; count = 0; fprintf (fp, "\n[Volumes]\n"); @@ -6259,7 +6258,7 @@ glusterd_friend_remove_notify (glusterd_peerctx_t *peerctx, int32_t op_errno) GF_ASSERT (peerctx); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_generation (peerctx->peerinfo_gen); if (!peerinfo) { gf_msg_debug (THIS->name, 0, "Could not find peer %s(%s). " @@ -6300,7 +6299,7 @@ glusterd_friend_remove_notify (glusterd_peerctx_t *peerctx, int32_t op_errno) } out: - rcu_read_unlock (); + RCU_READ_UNLOCK; return ret; } @@ -6340,7 +6339,7 @@ __glusterd_peer_rpc_notify (struct rpc_clnt *rpc, void *mydata, peerctx->peername); return 0; } - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_generation (peerctx->peerinfo_gen); if (!peerinfo) { @@ -6466,7 +6465,7 @@ __glusterd_peer_rpc_notify (struct rpc_clnt *rpc, void *mydata, } out: - rcu_read_unlock (); + RCU_READ_UNLOCK; glusterd_friend_sm (); glusterd_op_sm (); diff --git a/xlators/mgmt/glusterd/src/glusterd-handshake.c b/xlators/mgmt/glusterd/src/glusterd-handshake.c index b2a9b20..d18a7a3 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handshake.c +++ b/xlators/mgmt/glusterd/src/glusterd-handshake.c @@ -1140,9 +1140,9 @@ gd_validate_mgmt_hndsk_req (rpcsvc_request_t *req, dict_t *dict) */ if (!ret) { gf_uuid_parse (uuid_str, peer_uuid); - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find (peer_uuid, NULL) != NULL); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) return _gf_true; } @@ -1158,7 +1158,7 @@ gd_validate_mgmt_hndsk_req (rpcsvc_request_t *req, dict_t *dict) * is available in the peerinfo list but the uuid has changed of the * node due to a reinstall, in that case the validation should fail! */ - rcu_read_lock (); + RCU_READ_LOCK; if (!uuid_str) { ret = (glusterd_peerinfo_find (NULL, hostname) == NULL); } else { @@ -1177,7 +1177,7 @@ gd_validate_mgmt_hndsk_req (rpcsvc_request_t *req, dict_t *dict) ret = -1; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_HANDSHAKE_REQ_REJECTED, "Rejecting management " @@ -1728,7 +1728,7 @@ glusterd_event_connected_inject (glusterd_peerctx_t *peerctx) goto out; } - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_generation (peerctx->peerinfo_gen); if (!peerinfo) { @@ -1754,7 +1754,7 @@ glusterd_event_connected_inject (glusterd_peerctx_t *peerctx) GD_MSG_EVENT_INJECT_FAIL, "Unable to inject " "EVENT_CONNECTED ret = %d", ret); unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; out: gf_msg_debug ("glusterd", 0, "returning %d", ret); @@ -1824,7 +1824,7 @@ __glusterd_mgmt_hndsk_version_ack_cbk (struct rpc_req *req, struct iovec *iov, frame = myframe; peerctx = frame->local; - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_generation (peerctx->peerinfo_gen); if (!peerinfo) { gf_msg_debug (this->name, 0, "Could not find peer %s(%s)", @@ -1887,7 +1887,7 @@ out: if (ret != 0 && peerinfo) rpc_transport_disconnect (peerinfo->rpc->conn.trans, _gf_false); - rcu_read_unlock (); + RCU_READ_UNLOCK; frame->local = NULL; STACK_DESTROY (frame->root); @@ -1930,7 +1930,7 @@ __glusterd_mgmt_hndsk_version_cbk (struct rpc_req *req, struct iovec *iov, frame = myframe; peerctx = frame->local; - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_generation (peerctx->peerinfo_gen); if (!peerinfo) { @@ -2014,7 +2014,7 @@ out: _gf_false); } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (rsp.hndsk.hndsk_val) free (rsp.hndsk.hndsk_val); @@ -2070,7 +2070,7 @@ glusterd_mgmt_handshake (xlator_t *this, glusterd_peerctx_t *peerctx) GF_PROTOCOL_DICT_SERIALIZE (this, req_dict, (&req.hndsk.hndsk_val), req.hndsk.hndsk_len, ret, out); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_generation (peerctx->peerinfo_gen); if (!peerinfo) { @@ -2086,7 +2086,7 @@ glusterd_mgmt_handshake (xlator_t *this, glusterd_peerctx_t *peerctx) (xdrproc_t)xdr_gf_mgmt_hndsk_req); ret = 0; unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; out: if (ret && frame) STACK_DESTROY (frame->root); @@ -2202,7 +2202,7 @@ __glusterd_peer_dump_version_cbk (struct rpc_req *req, struct iovec *iov, frame = myframe; peerctx = frame->local; - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_generation (peerctx->peerinfo_gen); if (!peerinfo) { @@ -2282,7 +2282,7 @@ out: if (ret != 0 && peerinfo) rpc_transport_disconnect (peerinfo->rpc->conn.trans, _gf_false); - rcu_read_unlock (); + RCU_READ_UNLOCK; glusterd_friend_sm (); glusterd_op_sm (); @@ -2330,7 +2330,7 @@ glusterd_peer_dump_version (xlator_t *this, struct rpc_clnt *rpc, if (!peerctx) goto out; - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find_by_generation (peerctx->peerinfo_gen); if (!peerinfo) { @@ -2347,7 +2347,7 @@ glusterd_peer_dump_version (xlator_t *this, struct rpc_clnt *rpc, glusterd_peer_dump_version_cbk, (xdrproc_t)xdr_gf_dump_req); unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; out: if (ret && frame) STACK_DESTROY (frame->root); diff --git a/xlators/mgmt/glusterd/src/glusterd-mgmt.c b/xlators/mgmt/glusterd/src/glusterd-mgmt.c index 751d6e4..d98c6bc 100644 --- a/xlators/mgmt/glusterd/src/glusterd-mgmt.c +++ b/xlators/mgmt/glusterd/src/glusterd-mgmt.c @@ -52,14 +52,14 @@ gd_mgmt_v3_collate_errors (struct syncargs *args, int op_ret, int op_errno, args->op_ret = op_ret; args->op_errno = op_errno; - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (peerid, NULL); if (peerinfo) peer_str = gf_strdup (peerinfo->hostname); else peer_str = gf_strdup (uuid_utoa (uuid)); - rcu_read_unlock (); + RCU_READ_UNLOCK; is_operrstr_blk = (op_errstr && strcmp (op_errstr, "")); err_string = (is_operrstr_blk) ? op_errstr : err_str; @@ -761,7 +761,7 @@ glusterd_mgmt_v3_initiate_lockdown (glusterd_op_t op, dict_t *dict, synctask_barrier_init((&args)); peer_cnt = 0; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -779,7 +779,7 @@ glusterd_mgmt_v3_initiate_lockdown (glusterd_op_t op, dict_t *dict, MY_UUID, peer_uuid); peer_cnt++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (0 == peer_cnt) { ret = 0; @@ -1126,7 +1126,7 @@ glusterd_mgmt_v3_pre_validate (glusterd_op_t op, dict_t *req_dict, synctask_barrier_init((&args)); peer_cnt = 0; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -1144,7 +1144,7 @@ glusterd_mgmt_v3_pre_validate (glusterd_op_t op, dict_t *req_dict, MY_UUID, peer_uuid); peer_cnt++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (0 == peer_cnt) { ret = 0; @@ -1401,7 +1401,7 @@ glusterd_mgmt_v3_brick_op (glusterd_op_t op, dict_t *rsp_dict, dict_t *req_dict, synctask_barrier_init((&args)); peer_cnt = 0; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -1419,7 +1419,7 @@ glusterd_mgmt_v3_brick_op (glusterd_op_t op, dict_t *rsp_dict, dict_t *req_dict, MY_UUID, peer_uuid); peer_cnt++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (0 == peer_cnt) { ret = 0; @@ -1667,7 +1667,7 @@ glusterd_mgmt_v3_commit (glusterd_op_t op, dict_t *op_ctx, dict_t *req_dict, synctask_barrier_init((&args)); peer_cnt = 0; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -1702,7 +1702,7 @@ glusterd_mgmt_v3_commit (glusterd_op_t op, dict_t *op_ctx, dict_t *req_dict, MY_UUID, peer_uuid); peer_cnt++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (0 == peer_cnt) { ret = 0; @@ -1912,7 +1912,7 @@ glusterd_mgmt_v3_post_validate (glusterd_op_t op, int32_t op_ret, dict_t *dict, synctask_barrier_init((&args)); peer_cnt = 0; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -1930,7 +1930,7 @@ glusterd_mgmt_v3_post_validate (glusterd_op_t op, int32_t op_ret, dict_t *dict, &args, MY_UUID, peer_uuid); peer_cnt++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (0 == peer_cnt) { ret = 0; @@ -2094,7 +2094,7 @@ glusterd_mgmt_v3_release_peer_locks (glusterd_op_t op, dict_t *dict, synctask_barrier_init((&args)); peer_cnt = 0; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -2112,7 +2112,7 @@ glusterd_mgmt_v3_release_peer_locks (glusterd_op_t op, dict_t *dict, MY_UUID, peer_uuid); peer_cnt++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (0 == peer_cnt) { ret = 0; diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 9f76ab3..6414a4e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -1825,7 +1825,7 @@ glusterd_op_stage_sync_volume (dict_t *dict, char **op_errstr) ret = 0; } } else { - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (NULL, hostname); if (peerinfo == NULL) { @@ -1841,7 +1841,7 @@ glusterd_op_stage_sync_volume (dict_t *dict, char **op_errstr) ret = -1; } - rcu_read_unlock (); + RCU_READ_UNLOCK; } out: @@ -3964,7 +3964,7 @@ glusterd_op_ac_send_lock (glusterd_op_sm_event_t *event, void *ctx) priv = this->private; GF_ASSERT (priv); - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &priv->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -3985,7 +3985,7 @@ glusterd_op_ac_send_lock (glusterd_op_sm_event_t *event, void *ctx) if (proc->fn) { ret = proc->fn (NULL, this, peerinfo); if (ret) { - rcu_read_unlock (); + RCU_READ_UNLOCK; gf_msg (this->name, GF_LOG_WARNING, 0, GD_MSG_LOCK_REQ_SEND_FAIL, "Failed to send lock request " @@ -4009,7 +4009,7 @@ glusterd_op_ac_send_lock (glusterd_op_sm_event_t *event, void *ctx) ret = dict_set_static_ptr (dict, "peerinfo", peerinfo); if (ret) { - rcu_read_unlock (); + RCU_READ_UNLOCK; gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_DICT_SET_FAILED, "failed to set peerinfo"); @@ -4019,7 +4019,7 @@ glusterd_op_ac_send_lock (glusterd_op_sm_event_t *event, void *ctx) ret = proc->fn (NULL, this, dict); if (ret) { - rcu_read_unlock (); + RCU_READ_UNLOCK; gf_msg (this->name, GF_LOG_WARNING, 0, GD_MSG_MGMTV3_LOCK_REQ_SEND_FAIL, "Failed to send mgmt_v3 lock " @@ -4036,7 +4036,7 @@ glusterd_op_ac_send_lock (glusterd_op_sm_event_t *event, void *ctx) } } } - rcu_read_unlock (); + RCU_READ_UNLOCK; opinfo.pending_count = pending_count; @@ -4074,7 +4074,7 @@ glusterd_op_ac_send_unlock (glusterd_op_sm_event_t *event, void *ctx) priv = this->private; GF_ASSERT (priv); - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &priv->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -4152,7 +4152,7 @@ glusterd_op_ac_send_unlock (glusterd_op_sm_event_t *event, void *ctx) } } } - rcu_read_unlock (); + RCU_READ_UNLOCK; opinfo.pending_count = pending_count; @@ -4762,7 +4762,7 @@ glusterd_op_ac_send_stage_op (glusterd_op_sm_event_t *event, void *ctx) goto out; } - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &priv->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -4781,7 +4781,7 @@ glusterd_op_ac_send_stage_op (glusterd_op_sm_event_t *event, void *ctx) if (proc->fn) { ret = dict_set_static_ptr (dict, "peerinfo", peerinfo); if (ret) { - rcu_read_unlock (); + RCU_READ_UNLOCK; gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_DICT_SET_FAILED, "failed to " "set peerinfo"); @@ -4800,7 +4800,7 @@ glusterd_op_ac_send_stage_op (glusterd_op_sm_event_t *event, void *ctx) pending_count++; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; opinfo.pending_count = pending_count; out: @@ -5413,7 +5413,7 @@ glusterd_op_ac_send_commit_op (glusterd_op_sm_event_t *event, void *ctx) goto out; } - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &priv->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -5432,7 +5432,7 @@ glusterd_op_ac_send_commit_op (glusterd_op_sm_event_t *event, void *ctx) if (proc->fn) { ret = dict_set_static_ptr (dict, "peerinfo", peerinfo); if (ret) { - rcu_read_unlock (); + RCU_READ_UNLOCK; gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_DICT_SET_FAILED, "failed to set peerinfo"); @@ -5451,7 +5451,7 @@ glusterd_op_ac_send_commit_op (glusterd_op_sm_event_t *event, void *ctx) pending_count++; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; opinfo.pending_count = pending_count; gf_msg_debug (this->name, 0, "Sent commit op req for 'Volume %s' " diff --git a/xlators/mgmt/glusterd/src/glusterd-peer-utils.c b/xlators/mgmt/glusterd/src/glusterd-peer-utils.c index 592aa16..6ed5831 100644 --- a/xlators/mgmt/glusterd/src/glusterd-peer-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-peer-utils.c @@ -190,7 +190,7 @@ glusterd_peerinfo_find_by_uuid (uuid_t uuid) if (gf_uuid_is_null (uuid)) return NULL; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (entry, &priv->peers, uuid_list) { if (!gf_uuid_compare (entry->uuid, uuid)) { @@ -201,7 +201,7 @@ glusterd_peerinfo_find_by_uuid (uuid_t uuid) break; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (!found) gf_msg_debug (this->name, 0, @@ -330,7 +330,7 @@ glusterd_chk_peers_connected_befriended (uuid_t skip_uuid) priv= THIS->private; GF_ASSERT (priv); - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &priv->peers, uuid_list) { if (!gf_uuid_is_null (skip_uuid) && !gf_uuid_compare (skip_uuid, @@ -343,7 +343,7 @@ glusterd_chk_peers_connected_befriended (uuid_t skip_uuid) break; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; gf_msg_debug (THIS->name, 0, "Returning %s", (ret?"TRUE":"FALSE")); @@ -366,7 +366,7 @@ glusterd_uuid_to_hostname (uuid_t uuid) if (!gf_uuid_compare (MY_UUID, uuid)) { hostname = gf_strdup ("localhost"); } - rcu_read_lock (); + RCU_READ_LOCK; if (!cds_list_empty (&priv->peers)) { cds_list_for_each_entry_rcu (entry, &priv->peers, uuid_list) { if (!gf_uuid_compare (entry->uuid, uuid)) { @@ -375,7 +375,7 @@ glusterd_uuid_to_hostname (uuid_t uuid) } } } - rcu_read_unlock (); + RCU_READ_UNLOCK; return hostname; } @@ -406,14 +406,14 @@ glusterd_are_all_peers_up () conf = this->private; GF_VALIDATE_OR_GOTO (this->name, conf, out); - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { if (!peerinfo->connected) { - rcu_read_unlock (); + RCU_READ_UNLOCK; goto out; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; peers_up = _gf_true; @@ -434,7 +434,7 @@ glusterd_are_vol_all_peers_up (glusterd_volinfo_t *volinfo, if (!gf_uuid_compare (brickinfo->uuid, MY_UUID)) continue; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, peers, uuid_list) { if (gf_uuid_compare (peerinfo->uuid, brickinfo->uuid)) continue; @@ -447,11 +447,11 @@ glusterd_are_vol_all_peers_up (glusterd_volinfo_t *volinfo, *down_peerstr = gf_strdup (peerinfo->hostname); gf_msg_debug (THIS->name, 0, "Peer %s is down. ", peerinfo->hostname); - rcu_read_unlock (); + RCU_READ_UNLOCK; goto out; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; } ret = _gf_true; @@ -664,7 +664,7 @@ gd_peerinfo_find_from_hostname (const char *hoststr) GF_VALIDATE_OR_GOTO (this->name, (hoststr != NULL), out); - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peer, &priv->peers, uuid_list) { cds_list_for_each_entry_rcu (tmphost, &peer->hostnames, hostname_list) { @@ -679,7 +679,7 @@ gd_peerinfo_find_from_hostname (const char *hoststr) } } unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; out: return found; } @@ -713,7 +713,7 @@ gd_peerinfo_find_from_addrinfo (const struct addrinfo *addr) GF_VALIDATE_OR_GOTO (this->name, (addr != NULL), out); - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peer, &conf->peers, uuid_list) { cds_list_for_each_entry_rcu (address, &peer->hostnames, hostname_list) { @@ -747,7 +747,7 @@ gd_peerinfo_find_from_addrinfo (const struct addrinfo *addr) } } unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; out: return found; } @@ -1014,7 +1014,7 @@ glusterd_peerinfo_find_by_generation (uint32_t generation) { GF_ASSERT (priv); - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (entry, &priv->peers, uuid_list) { if (entry->generation == generation) { @@ -1025,7 +1025,7 @@ glusterd_peerinfo_find_by_generation (uint32_t generation) { break; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (!found) gf_msg_debug (this->name, 0, @@ -1047,10 +1047,10 @@ glusterd_get_peers_count () { conf = this->private; GF_VALIDATE_OR_GOTO (this->name, conf, out); - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peer, &conf->peers, uuid_list) count++; - rcu_read_unlock (); + RCU_READ_UNLOCK; out: return count; diff --git a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c index 5fc3669..f9ad524 100644 --- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c @@ -278,7 +278,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr, } if (!gf_is_local_addr (host)) { - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (NULL, host); if (peerinfo == NULL) { @@ -300,7 +300,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr, *op_errstr = gf_strdup (msg); ret = -1; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) goto out; diff --git a/xlators/mgmt/glusterd/src/glusterd-reset-brick.c b/xlators/mgmt/glusterd/src/glusterd-reset-brick.c index c1de043..60c5716 100644 --- a/xlators/mgmt/glusterd/src/glusterd-reset-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-reset-brick.c @@ -165,7 +165,7 @@ glusterd_reset_brick_prevalidate (dict_t *dict, char **op_errstr, if (ret) goto out; } else { - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (NULL, host); if (peerinfo == NULL) { @@ -190,7 +190,7 @@ glusterd_reset_brick_prevalidate (dict_t *dict, char **op_errstr, *op_errstr = gf_strdup (msg); ret = -1; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) goto out; diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c index 86e1256..c669240 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c @@ -280,7 +280,7 @@ __glusterd_probe_cbk (struct rpc_req *req, struct iovec *iov, goto out; } - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (rsp.uuid, rsp.hostname); if (peerinfo == NULL) { ret = -1; @@ -422,7 +422,7 @@ cont: GD_MSG_PROBE_REQ_RESP_RCVD, "Received resp to probe req"); unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; out: free (rsp.hostname);//malloced by xdr @@ -485,7 +485,7 @@ __glusterd_friend_add_cbk (struct rpc_req * req, struct iovec *iov, "Received %s from uuid: %s, host: %s, port: %d", (op_ret)?"RJT":"ACC", uuid_utoa (rsp.uuid), rsp.hostname, rsp.port); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (rsp.uuid, rsp.hostname); if (peerinfo == NULL) { @@ -527,7 +527,7 @@ __glusterd_friend_add_cbk (struct rpc_req * req, struct iovec *iov, ret = glusterd_friend_sm_inject_event (event); unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; out: ctx = ((call_frame_t *)myframe)->local; ((call_frame_t *)myframe)->local = NULL; @@ -605,7 +605,7 @@ __glusterd_friend_remove_cbk (struct rpc_req * req, struct iovec *iov, (op_ret)?"RJT":"ACC", uuid_utoa (rsp.uuid), rsp.hostname, rsp.port); inject: - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (rsp.uuid, ctx->hostname); if (peerinfo == NULL) { @@ -640,7 +640,7 @@ inject: op_ret = 0; unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; respond: ret = glusterd_xfer_cli_deprobe_resp (ctx->req, op_ret, op_errno, NULL, @@ -769,9 +769,9 @@ __glusterd_cluster_lock_cbk (struct rpc_req *req, struct iovec *iov, uuid_utoa (rsp.uuid)); } - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find (rsp.uuid, NULL) == NULL); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg (this->name, GF_LOG_CRITICAL, 0, @@ -889,9 +889,9 @@ glusterd_mgmt_v3_lock_peers_cbk_fn (struct rpc_req *req, struct iovec *iov, uuid_utoa (rsp.uuid)); } - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find (rsp.uuid, NULL) == NULL); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg (this->name, GF_LOG_CRITICAL, 0, @@ -1000,9 +1000,9 @@ glusterd_mgmt_v3_unlock_peers_cbk_fn (struct rpc_req *req, struct iovec *iov, uuid_utoa (rsp.uuid)); } - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find (rsp.uuid, NULL) == NULL); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg (this->name, GF_LOG_CRITICAL, 0, @@ -1109,9 +1109,9 @@ __glusterd_cluster_unlock_cbk (struct rpc_req *req, struct iovec *iov, uuid_utoa (rsp.uuid)); } - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find (rsp.uuid, NULL) == NULL); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { gf_msg (this->name, GF_LOG_CRITICAL, 0, @@ -1239,7 +1239,7 @@ out: uuid_utoa (rsp.uuid)); } - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (rsp.uuid, NULL); if (peerinfo == NULL) { gf_msg (this->name, GF_LOG_CRITICAL, 0, @@ -1268,7 +1268,7 @@ out: event_type = GD_OP_EVENT_RCVD_ACC; } - rcu_read_unlock (); + RCU_READ_UNLOCK; ret = glusterd_set_txn_opinfo (txn_id, &opinfo); @@ -1399,7 +1399,7 @@ __glusterd_commit_op_cbk (struct rpc_req *req, struct iovec *iov, "for txn_id = %s", uuid_utoa (*txn_id)); } - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (rsp.uuid, NULL); if (peerinfo == NULL) { gf_msg (this->name, GF_LOG_CRITICAL, 0, @@ -1450,7 +1450,7 @@ __glusterd_commit_op_cbk (struct rpc_req *req, struct iovec *iov, } } unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; out: @@ -1554,11 +1554,11 @@ glusterd_rpc_friend_add (call_frame_t *frame, xlator_t *this, GF_ASSERT (priv); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); if (!peerinfo) { - rcu_read_unlock (); + RCU_READ_UNLOCK; ret = -1; gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_PEER_NOT_FOUND, "Could not find peer %s(%s)", @@ -1570,7 +1570,7 @@ glusterd_rpc_friend_add (call_frame_t *frame, xlator_t *this, req.hostname = gf_strdup (peerinfo->hostname); req.port = peerinfo->port; - rcu_read_unlock (); + RCU_READ_UNLOCK; ret = glusterd_add_volumes_to_export_dict (&peer_data); if (ret) { @@ -1653,11 +1653,11 @@ glusterd_rpc_friend_remove (call_frame_t *frame, xlator_t *this, GF_ASSERT (priv); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); if (!peerinfo) { - rcu_read_unlock (); + RCU_READ_UNLOCK; ret = -1; gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_PEER_NOT_FOUND, "Could not find peer %s(%s)", @@ -1674,7 +1674,7 @@ glusterd_rpc_friend_remove (call_frame_t *frame, xlator_t *this, this, glusterd_friend_remove_cbk, (xdrproc_t)xdr_gd1_mgmt_friend_req); - rcu_read_unlock (); + RCU_READ_UNLOCK; out: GF_FREE (req.hostname); diff --git a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c index b01bfaa..ef97bfd 100644 --- a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c +++ b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c @@ -224,14 +224,14 @@ glusterd_get_quorum_cluster_counts (xlator_t *this, int *active_count, if (active_count) *active_count = 1; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { if (_is_contributing_to_quorum (peerinfo->quorum_contrib)) inquorum_count = inquorum_count + 1; if (active_count && (peerinfo->quorum_contrib == QUORUM_UP)) *active_count = *active_count + 1; } - rcu_read_unlock (); + RCU_READ_UNLOCK; ret = dict_get_str (conf->opts, GLUSTERD_QUORUM_RATIO_KEY, &val); if (ret == 0) { diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.c b/xlators/mgmt/glusterd/src/glusterd-sm.c index 6c56837..a2ef9f7 100644 --- a/xlators/mgmt/glusterd/src/glusterd-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-sm.c @@ -157,7 +157,7 @@ glusterd_broadcast_friend_delete (char *hostname, uuid_t uuid) if (ret) goto out; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &priv->peers, uuid_list) { if (!peerinfo->connected || !peerinfo->peer) continue; @@ -180,7 +180,7 @@ glusterd_broadcast_friend_delete (char *hostname, uuid_t uuid) } } unlock: - rcu_read_unlock (); + RCU_READ_UNLOCK; gf_msg_debug ("glusterd", 0, "Returning with %d", ret); @@ -224,7 +224,7 @@ glusterd_ac_reverse_probe_begin (glusterd_friend_sm_event_t *event, void *ctx) GF_ASSERT (event); GF_ASSERT (ctx); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); if (!peerinfo) { @@ -271,7 +271,7 @@ glusterd_ac_reverse_probe_begin (glusterd_friend_sm_event_t *event, void *ctx) } out: - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { if (new_event) @@ -302,7 +302,7 @@ glusterd_ac_friend_add (glusterd_friend_sm_event_t *event, void *ctx) GF_ASSERT (conf); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); if (!peerinfo) { @@ -326,7 +326,7 @@ glusterd_ac_friend_add (glusterd_friend_sm_event_t *event, void *ctx) } out: - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret && frame) STACK_DESTROY (frame->root); @@ -359,7 +359,7 @@ glusterd_ac_friend_probe (glusterd_friend_sm_event_t *event, void *ctx) GF_ASSERT (conf); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (NULL, probe_ctx->hostname); if (peerinfo == NULL) { //We should not reach this state ideally @@ -406,7 +406,7 @@ glusterd_ac_friend_probe (glusterd_friend_sm_event_t *event, void *ctx) } out: - rcu_read_unlock (); + RCU_READ_UNLOCK; if (dict) dict_unref (dict); @@ -439,7 +439,7 @@ glusterd_ac_send_friend_remove_req (glusterd_friend_sm_event_t *event, GF_ASSERT (conf); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); if (!peerinfo) { @@ -489,7 +489,7 @@ glusterd_ac_send_friend_remove_req (glusterd_friend_sm_event_t *event, } out: - rcu_read_unlock (); + RCU_READ_UNLOCK; gf_msg_debug ("glusterd", 0, "Returning with %d", ret); @@ -533,7 +533,7 @@ glusterd_ac_send_friend_update (glusterd_friend_sm_event_t *event, void *ctx) GF_ASSERT (priv); - rcu_read_lock (); + RCU_READ_LOCK; cur_peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); if (!cur_peerinfo) { @@ -596,7 +596,7 @@ glusterd_ac_send_friend_update (glusterd_friend_sm_event_t *event, void *ctx) gf_msg_debug ("glusterd", 0, "Returning with %d", ret); out: - rcu_read_unlock (); + RCU_READ_UNLOCK; if (friends) dict_unref (friends); @@ -628,7 +628,7 @@ glusterd_ac_update_friend (glusterd_friend_sm_event_t *event, void *ctx) GF_ASSERT (priv); - rcu_read_lock (); + RCU_READ_LOCK; cur_peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); if (!cur_peerinfo) { @@ -690,7 +690,7 @@ glusterd_ac_update_friend (glusterd_friend_sm_event_t *event, void *ctx) gf_msg_debug (this->name, 0, "Returning with %d", ret); out: - rcu_read_unlock (); + RCU_READ_UNLOCK; if (friends) dict_unref (friends); @@ -790,13 +790,13 @@ glusterd_ac_handle_friend_remove_req (glusterd_friend_sm_event_t *event, ret = glusterd_xfer_friend_remove_resp (ev_ctx->req, ev_ctx->hostname, ev_ctx->port); - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &priv->peers, uuid_list) { ret = glusterd_friend_sm_new_event (GD_FRIEND_EVENT_REMOVE_FRIEND, &new_event); if (ret) { - rcu_read_unlock (); + RCU_READ_UNLOCK; goto out; } @@ -805,13 +805,13 @@ glusterd_ac_handle_friend_remove_req (glusterd_friend_sm_event_t *event, ret = glusterd_friend_sm_inject_event (new_event); if (ret) { - rcu_read_unlock (); + RCU_READ_UNLOCK; goto out; } new_event = NULL; } - rcu_read_unlock (); + RCU_READ_UNLOCK; glusterd_peer_detach_cleanup (priv); out: @@ -831,7 +831,7 @@ glusterd_ac_friend_remove (glusterd_friend_sm_event_t *event, void *ctx) GF_ASSERT (event); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); if (!peerinfo) { @@ -839,7 +839,7 @@ glusterd_ac_friend_remove (glusterd_friend_sm_event_t *event, void *ctx) GD_MSG_PEER_NOT_FOUND, "Could not find peer %s(%s)", event->peername, uuid_utoa (event->peerid)); - rcu_read_unlock (); + RCU_READ_UNLOCK; goto out; } ret = glusterd_friend_remove_cleanup_vols (peerinfo->uuid); @@ -847,7 +847,7 @@ glusterd_ac_friend_remove (glusterd_friend_sm_event_t *event, void *ctx) gf_msg (THIS->name, GF_LOG_WARNING, 0, GD_MSG_VOL_CLEANUP_FAIL, "Volumes cleanup failed"); - rcu_read_unlock (); + RCU_READ_UNLOCK; /* Exiting read critical section as glusterd_peerinfo_cleanup calls * synchronize_rcu before freeing the peerinfo */ @@ -896,14 +896,14 @@ glusterd_ac_handle_friend_add_req (glusterd_friend_sm_event_t *event, void *ctx) ev_ctx = ctx; gf_uuid_copy (uuid, ev_ctx->uuid); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); if (!peerinfo) { gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_PEER_NOT_FOUND, "Could not find peer %s(%s)", event->peername, uuid_utoa (event->peerid)); ret = -1; - rcu_read_unlock (); + RCU_READ_UNLOCK; goto out; } @@ -913,7 +913,7 @@ glusterd_ac_handle_friend_add_req (glusterd_friend_sm_event_t *event, void *ctx) */ gf_uuid_copy (peerinfo->uuid, ev_ctx->uuid); - rcu_read_unlock (); + RCU_READ_UNLOCK; conf = this->private; GF_ASSERT (conf); @@ -1032,7 +1032,7 @@ glusterd_friend_sm_transition_state (uuid_t peerid, char *peername, GF_ASSERT (state); GF_ASSERT (peername); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (peerid, peername); if (!peerinfo) { goto out; @@ -1047,7 +1047,7 @@ glusterd_friend_sm_transition_state (uuid_t peerid, char *peername, ret = 0; out: - rcu_read_unlock (); + RCU_READ_UNLOCK; return ret; } @@ -1357,7 +1357,7 @@ glusterd_friend_sm () cds_list_del_init (&event->list); event_type = event->event; - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); @@ -1368,7 +1368,7 @@ glusterd_friend_sm () glusterd_friend_sm_event_name_get (event_type)); GF_FREE (event); - rcu_read_unlock (); + RCU_READ_UNLOCK; continue; } gf_msg_debug ("glusterd", 0, "Dequeued event of type: '%s'", @@ -1377,7 +1377,7 @@ glusterd_friend_sm () old_state = peerinfo->state.state; - rcu_read_unlock (); + RCU_READ_UNLOCK; /* Giving up read-critical section here as we only need * the current state to call the handler. * @@ -1435,11 +1435,11 @@ glusterd_friend_sm () /* We need to obtain peerinfo reference once again as we * had exited the read critical section above. */ - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (event->peerid, event->peername); if (!peerinfo) { - rcu_read_unlock (); + RCU_READ_UNLOCK; /* A peer can only be deleted as a effect of * this state machine, and two such state * machines can never run at the same time. @@ -1463,7 +1463,7 @@ glusterd_friend_sm () } ret = glusterd_store_peerinfo (peerinfo); - rcu_read_unlock (); + RCU_READ_UNLOCK; glusterd_destroy_friend_event_context (event); GF_FREE (event); diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c index 830a67f..3c362e1 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c @@ -185,7 +185,7 @@ glusterd_find_missed_snap (dict_t *rsp_dict, glusterd_volinfo_t *vol, continue; } - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, peers, uuid_list) { if (gf_uuid_compare (peerinfo->uuid, brickinfo->uuid)) { /* If the brick doesnt belong to this peer */ @@ -210,12 +210,12 @@ glusterd_find_missed_snap (dict_t *rsp_dict, glusterd_volinfo_t *vol, "info for %s:%s in the " "rsp_dict", brickinfo->hostname, brickinfo->path); - rcu_read_unlock (); + RCU_READ_UNLOCK; goto out; } } } - rcu_read_unlock (); + RCU_READ_UNLOCK; brick_count++; } diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index b3c4d9a..1db2c7c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -4593,13 +4593,13 @@ glusterd_store_retrieve_peers (xlator_t *this) args.mode = GD_MODE_ON; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &priv->peers, uuid_list) { ret = glusterd_friend_rpc_create (this, peerinfo, &args); if (ret) break; } - rcu_read_unlock (); + RCU_READ_UNLOCK; peerinfo = NULL; out: diff --git a/xlators/mgmt/glusterd/src/glusterd-syncop.c b/xlators/mgmt/glusterd/src/glusterd-syncop.c index 5aaa7f8..9a67d1c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-syncop.c +++ b/xlators/mgmt/glusterd/src/glusterd-syncop.c @@ -52,13 +52,13 @@ gd_collate_errors (struct syncargs *args, int op_ret, int op_errno, args->op_ret = op_ret; args->op_errno = op_errno; - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (peerid, NULL); if (peerinfo) peer_str = gf_strdup (peerinfo->hostname); else peer_str = gf_strdup (uuid_utoa (uuid)); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (op_errstr && strcmp (op_errstr, "")) { len = snprintf (err_str, sizeof(err_str) - 1, @@ -571,7 +571,7 @@ _gd_syncop_mgmt_lock_cbk (struct rpc_req *req, struct iovec *iov, gf_uuid_copy (args->uuid, rsp.uuid); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (*peerid, NULL); if (peerinfo) { /* Set peer as locked, so we unlock only the locked peers */ @@ -584,7 +584,7 @@ _gd_syncop_mgmt_lock_cbk (struct rpc_req *req, struct iovec *iov, "Could not find peer with " "ID %s", uuid_utoa (*peerid)); } - rcu_read_unlock (); + RCU_READ_UNLOCK; op_ret = rsp.op_ret; op_errno = rsp.op_errno; @@ -670,7 +670,7 @@ _gd_syncop_mgmt_unlock_cbk (struct rpc_req *req, struct iovec *iov, gf_uuid_copy (args->uuid, rsp.uuid); - rcu_read_lock (); + RCU_READ_LOCK; peerinfo = glusterd_peerinfo_find (*peerid, NULL); if (peerinfo) { peerinfo->locked = _gf_false; @@ -680,7 +680,7 @@ _gd_syncop_mgmt_unlock_cbk (struct rpc_req *req, struct iovec *iov, GD_MSG_PEER_NOT_FOUND, "Could not find peer with " "ID %s", uuid_utoa (*peerid)); } - rcu_read_unlock (); + RCU_READ_UNLOCK; op_ret = rsp.op_ret; op_errno = rsp.op_errno; @@ -780,9 +780,9 @@ _gd_syncop_stage_op_cbk (struct rpc_req *req, struct iovec *iov, } } - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find (rsp.uuid, NULL) == NULL); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { ret = -1; gf_msg (this->name, GF_LOG_CRITICAL, 0, @@ -1110,9 +1110,9 @@ _gd_syncop_commit_op_cbk (struct rpc_req *req, struct iovec *iov, } } - rcu_read_lock (); + RCU_READ_LOCK; ret = (glusterd_peerinfo_find (rsp.uuid, NULL) == 0); - rcu_read_unlock (); + RCU_READ_UNLOCK; if (ret) { ret = -1; gf_msg (this->name, GF_LOG_CRITICAL, 0, @@ -1227,7 +1227,7 @@ gd_lock_op_phase (glusterd_conf_t *conf, glusterd_op_t op, dict_t *op_ctx, synctask_barrier_init((&args)); peer_cnt = 0; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -1252,7 +1252,7 @@ gd_lock_op_phase (glusterd_conf_t *conf, glusterd_op_t op, dict_t *op_ctx, MY_UUID, peer_uuid, txn_id); peer_cnt++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (0 == peer_cnt) { ret = 0; @@ -1360,7 +1360,7 @@ stage_done: synctask_barrier_init((&args)); peer_cnt = 0; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -1379,7 +1379,7 @@ stage_done: op, req_dict, op_ctx); peer_cnt++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (0 == peer_cnt) { ret = 0; @@ -1491,7 +1491,7 @@ commit_done: synctask_barrier_init((&args)); peer_cnt = 0; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were available before the * transaction started @@ -1510,7 +1510,7 @@ commit_done: op, req_dict, op_ctx); peer_cnt++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; if (0 == peer_cnt) { ret = 0; @@ -1568,7 +1568,7 @@ gd_unlock_op_phase (glusterd_conf_t *conf, glusterd_op_t op, int *op_ret, peer_cnt = 0; if (cluster_lock) { - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were available before @@ -1590,7 +1590,7 @@ gd_unlock_op_phase (glusterd_conf_t *conf, glusterd_op_t op, int *op_ret, peer_cnt++; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; } else { ret = dict_get_int32 (op_ctx, "hold_global_locks", &global); @@ -1599,7 +1599,7 @@ gd_unlock_op_phase (glusterd_conf_t *conf, glusterd_op_t op, int *op_ret, else type = "vol"; if (volname || global) { - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Only send requests to peers who were @@ -1620,7 +1620,7 @@ gd_unlock_op_phase (glusterd_conf_t *conf, glusterd_op_t op, int *op_ret, tmp_uuid, txn_id); peer_cnt++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; } } diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index d789c53..2290343 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -10934,7 +10934,7 @@ glusterd_volume_rebalance_use_rsp_dict (dict_t *aggr, dict_t *rsp_dict) node_uuid_str = gf_strdup (node_uuid); /* Finding the index of the node-uuid in the peer-list */ - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { peer_uuid_str = gd_peer_uuid_str (peerinfo); @@ -10943,7 +10943,7 @@ glusterd_volume_rebalance_use_rsp_dict (dict_t *aggr, dict_t *rsp_dict) current_index++; } - rcu_read_unlock (); + RCU_READ_UNLOCK; /* Setting the largest index value as the total count. */ ret = dict_get_int32 (ctx_dict, "count", &count); @@ -13716,7 +13716,7 @@ glusterd_count_connected_peers (int32_t *count) *count = 1; - rcu_read_lock (); + RCU_READ_LOCK; cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { /* Find peer who is connected and is a friend */ if ((peerinfo->connected) && @@ -13724,7 +13724,7 @@ glusterd_count_connected_peers (int32_t *count) (*count)++; } } - rcu_read_unlock (); + RCU_READ_UNLOCK; ret = 0; out: diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index cbdca52..42c8821 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -804,6 +804,22 @@ do { \ *snap_volname_ptr = '\0'; \ } while (0) +#define RCU_READ_LOCK do { \ + pthread_mutex_lock(&(THIS->ctx)->cleanup_lock); \ + { \ + rcu_read_lock(); \ + } \ + pthread_mutex_unlock(&(THIS->ctx)->cleanup_lock); \ + } while (0) + +#define RCU_READ_UNLOCK do { \ + pthread_mutex_lock(&(THIS->ctx)->cleanup_lock); \ + { \ + rcu_read_unlock(); \ + } \ + pthread_mutex_unlock(&(THIS->ctx)->cleanup_lock); \ + } while (0) + #define GLUSTERD_DUMP_PEERS(head, member, xpeers) do { \ glusterd_peerinfo_t *_peerinfo = NULL; \ int index = 1; \ @@ -815,7 +831,7 @@ do { \ snprintf (key, sizeof (key), \ "glusterd.xaction_peer"); \ \ - rcu_read_lock (); \ + RCU_READ_LOCK; \ cds_list_for_each_entry_rcu (_peerinfo, head, member) { \ glusterd_dump_peer (_peerinfo, key, index, xpeers); \ if (!xpeers) \ @@ -823,7 +839,7 @@ do { \ index); \ index++; \ } \ - rcu_read_unlock (); \ + RCU_READ_UNLOCK; \ \ } while (0) -- 1.8.3.1