summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-op-sm.c
diff options
context:
space:
mode:
authorAtin Mukherjee <amukherj@redhat.com>2016-04-11 16:07:40 +0530
committerJeff Darcy <jdarcy@redhat.com>2016-04-11 11:39:16 -0700
commitd129d4eea33aae5db24dba17adcb04e9d4829817 (patch)
tree24044605fc12b071715ab4f7189672591428942c /xlators/mgmt/glusterd/src/glusterd-op-sm.c
parent65575da24088ba4602b94db649be12376b87484f (diff)
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 <amukherj@redhat.com> Reviewed-on: http://review.gluster.org/13965 Smoke: Gluster Build System <jenkins@build.gluster.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-op-sm.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-op-sm.c17
1 files changed, 11 insertions, 6 deletions
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;