summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmar Tumballi <amar@gluster.com>2011-02-22 05:00:37 +0000
committerAnand V. Avati <avati@dev.gluster.com>2011-02-22 09:21:47 -0800
commit46279693027230d5454ad98c267d93d5139e19af (patch)
tree3bd596d4c4f68f8a74ca6218526c493c70ac8c5f
parentd437dd91bf167675615d7c7c2f99abbed2d899a1 (diff)
send the CHILD_DOWN event also to fuse
and start the fuse thread in CHILD_DOWN event too. Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 2005 (Mounting Gluster volume with RO bricks hangs) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2005
-rw-r--r--libglusterfs/src/defaults.c4
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c42
2 files changed, 13 insertions, 33 deletions
diff --git a/libglusterfs/src/defaults.c b/libglusterfs/src/defaults.c
index 00f84694a..ec41ce926 100644
--- a/libglusterfs/src/defaults.c
+++ b/libglusterfs/src/defaults.c
@@ -1219,10 +1219,11 @@ default_notify (xlator_t *this, int32_t event, void *data, ...)
break;
case GF_EVENT_CHILD_CONNECTING:
case GF_EVENT_CHILD_MODIFIED:
+ case GF_EVENT_CHILD_DOWN:
case GF_EVENT_CHILD_UP:
{
xlator_list_t *parent = this->parents;
- /* Handle the case of CHILD_UP specially, send it to fuse */
+ /* Handle case of CHILD_* event specially, send it to fuse */
if (!parent && this->ctx && this->ctx->master)
xlator_notify (this->ctx->master, event, this->graph, NULL);
@@ -1234,7 +1235,6 @@ default_notify (xlator_t *this, int32_t event, void *data, ...)
}
}
break;
- case GF_EVENT_CHILD_DOWN:
default:
{
xlator_list_t *parent = this->parents;
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index affa37d5b..f988c0102 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -3324,21 +3324,10 @@ notify (xlator_t *this, int32_t event, void *data, ...)
break;
+ case GF_EVENT_CHILD_UP:
+ case GF_EVENT_CHILD_DOWN:
case GF_EVENT_CHILD_CONNECTING:
{
- if (!private->fuse_thread_started) {
- private->fuse_thread_started = 1;
-
- ret = pthread_create (&private->fuse_thread, NULL,
- fuse_thread_proc, this);
- if (ret != 0) {
- gf_log (this->name, GF_LOG_DEBUG,
- "pthread_create() failed (%s)",
- strerror (errno));
- break;
- }
- }
-
if (data) {
graph = data;
ret = fuse_graph_setup (this, graph);
@@ -3347,17 +3336,15 @@ notify (xlator_t *this, int32_t event, void *data, ...)
"failed to setup the graph");
}
- break;
- }
- case GF_EVENT_CHILD_UP:
- {
- /* set priv->active_subvol */
- /* set priv->first_lookup = 1 */
- graph = data;
- ret = fuse_graph_setup (this, graph);
- if (ret)
- gf_log (this->name, GF_LOG_WARNING,
- "failed to setup the graph");
+ if (event == GF_EVENT_CHILD_UP) {
+
+ pthread_mutex_lock (&private->sync_mutex);
+ {
+ private->child_up = 1;
+ pthread_cond_broadcast (&private->sync_cond);
+ }
+ pthread_mutex_unlock (&private->sync_mutex);
+ }
if (!private->fuse_thread_started) {
private->fuse_thread_started = 1;
@@ -3372,13 +3359,6 @@ notify (xlator_t *this, int32_t event, void *data, ...)
}
}
- pthread_mutex_lock (&private->sync_mutex);
- {
- private->child_up = 1;
- pthread_cond_broadcast (&private->sync_cond);
- }
- pthread_mutex_unlock (&private->sync_mutex);
-
break;
}