diff options
author | Amar Tumballi <amar@gluster.com> | 2011-02-22 05:00:37 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2011-02-22 09:21:47 -0800 |
commit | 46279693027230d5454ad98c267d93d5139e19af (patch) | |
tree | 3bd596d4c4f68f8a74ca6218526c493c70ac8c5f | |
parent | d437dd91bf167675615d7c7c2f99abbed2d899a1 (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.c | 4 | ||||
-rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 42 |
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; } |