glusterfsd+libglusterfs: add null checks during attach
It's possible (though unlikely) that we could get a brick-attach request while we're not ready to process it (ctx->active not set yet). Add code to guard against this possibility, and return appropriate error indicators. Change-Id: Icb3bc52ce749258a3f03cbbbdf4c2320c5c541a0 BUG: 1430860 Signed-off-by: Jeff Darcy <jdarcy@redhat.com> Reviewed-on: https://review.gluster.org/16883 Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
This commit is contained in:
parent
53e2c875cf
commit
90b2b9b29f
@ -824,9 +824,9 @@ out:
|
||||
int
|
||||
glusterfs_handle_attach (rpcsvc_request_t *req)
|
||||
{
|
||||
int32_t ret = -1;
|
||||
gd1_mgmt_brick_op_req xlator_req = {0,};
|
||||
xlator_t *this = NULL;
|
||||
int32_t ret = -1;
|
||||
gd1_mgmt_brick_op_req xlator_req = {0,};
|
||||
xlator_t *this = NULL;
|
||||
|
||||
GF_ASSERT (req);
|
||||
this = THIS;
|
||||
@ -838,15 +838,24 @@ glusterfs_handle_attach (rpcsvc_request_t *req)
|
||||
if (ret < 0) {
|
||||
/*failed to decode msg;*/
|
||||
req->rpc_err = GARBAGE_ARGS;
|
||||
goto out;
|
||||
return -1;
|
||||
}
|
||||
|
||||
gf_log (this->name, GF_LOG_INFO, "got attach for %s", xlator_req.name);
|
||||
glusterfs_graph_attach (this->ctx->active, xlator_req.name);
|
||||
glusterfs_autoscale_threads (this->ctx, 1);
|
||||
if (this->ctx->active) {
|
||||
gf_log (this->name, GF_LOG_INFO,
|
||||
"got attach for %s", xlator_req.name);
|
||||
ret = glusterfs_graph_attach (this->ctx->active,
|
||||
xlator_req.name);
|
||||
if (ret == 0) {
|
||||
glusterfs_autoscale_threads (this->ctx, 1);
|
||||
}
|
||||
} else {
|
||||
gf_log (this->name, GF_LOG_WARNING,
|
||||
"got attach for %s but no active graph",
|
||||
xlator_req.name);
|
||||
}
|
||||
|
||||
out:
|
||||
glusterfs_translator_info_response_send (req, 0, NULL, NULL);
|
||||
glusterfs_translator_info_response_send (req, ret, NULL, NULL);
|
||||
|
||||
free (xlator_req.input.input_val);
|
||||
free (xlator_req.name);
|
||||
|
@ -1040,6 +1040,10 @@ glusterfs_graph_attach (glusterfs_graph_t *orig_graph, char *path)
|
||||
xlator_t *xl;
|
||||
char *volfile_id;
|
||||
|
||||
if (!orig_graph) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
fp = fopen (path, "r");
|
||||
if (!fp) {
|
||||
gf_log (THIS->name, GF_LOG_WARNING,
|
||||
|
Loading…
x
Reference in New Issue
Block a user