From d129d4eea33aae5db24dba17adcb04e9d4829817 Mon Sep 17 00:00:00 2001 From: Atin Mukherjee Date: Mon, 11 Apr 2016 16:07:40 +0530 Subject: glusterd: populate brickinfo->real_path conditionally glusterd_brickinfo_new_from_brick () is called from multiple places and one of them is glusterd_brick_rpc_notify where its very well possible that an underlying brick's file system has crashed and a disconnect event has been received. In this case glusterd tries to build the brickinfo from the brickid in the RPC request, however the same fails as glusterd_brickinfo_new_from_brick () fails from realpath. Fix is to skip populating real_path if its a disconnect event. Change-Id: I9d9149c64a9cf2247abb731f219c1b1eef037960 BUG: 1325841 Signed-off-by: Atin Mukherjee Reviewed-on: http://review.gluster.org/13965 Smoke: Gluster Build System CentOS-regression: Gluster Build System NetBSD-regression: NetBSD Build System Reviewed-by: Jeff Darcy --- xlators/mgmt/glusterd/src/glusterd-op-sm.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'xlators/mgmt/glusterd/src/glusterd-op-sm.c') diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index eda840a0483..951d06b2ff7 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -1724,7 +1724,8 @@ glusterd_op_stage_status_volume (dict_t *dict, char **op_errstr) goto out; ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo, - &brickinfo); + &brickinfo, + _gf_true); if (ret) { snprintf (msg, sizeof(msg), "No brick %s in" " volume %s", brick, volname); @@ -3241,7 +3242,8 @@ glusterd_op_status_volume (dict_t *dict, char **op_errstr, ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo, - &brickinfo); + &brickinfo, + _gf_true); if (ret) goto out; @@ -5951,7 +5953,8 @@ glusterd_bricks_select_remove_brick (dict_t *dict, char **op_errstr, } ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo, - &brickinfo); + &brickinfo, + _gf_true); if (ret) goto out; @@ -6103,8 +6106,9 @@ glusterd_bricks_select_profile_volume (dict_t *dict, char **op_errstr, } ret = dict_get_str (dict, "brick", &brick); if (!ret) { - ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo, - &brickinfo); + ret = glusterd_volume_brickinfo_get_by_brick + (brick, volinfo, &brickinfo, + _gf_true); if (ret) goto out; @@ -6809,7 +6813,8 @@ glusterd_bricks_select_status_volume (dict_t *dict, char **op_errstr, } ret = glusterd_volume_brickinfo_get_by_brick (brickname, volinfo, - &brickinfo); + &brickinfo, + _gf_true); if (ret) goto out; -- cgit