diff options
author | Raghavendra G <raghavendra@gluster.com> | 2011-07-01 00:55:16 +0000 |
---|---|---|
committer | Anand Avati <avati@gluster.com> | 2011-07-01 01:27:24 -0700 |
commit | d7536af3164ee80e7b12d7bca305e63e073fb257 (patch) | |
tree | da1f097191821bb90551276eb0056ef250c9642c | |
parent | 5a12de49915c2a7d5aec783c389c7a5cc0be8a1f (diff) |
mnt/fuse: Do a pthread_cond_broadcast for both CHILD_UP and CHILD_DOWN events.
Signed-off-by: Raghavendra G <raghavendra@gluster.com>
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 3091 (rebalance fails with "transport endpoint not connected" in 3.2.1 rdma set-up)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=3091
-rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 11 | ||||
-rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.h | 2 |
2 files changed, 7 insertions, 6 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index 9f273a396..ec10cc4d6 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -3039,7 +3039,7 @@ fuse_graph_sync (xlator_t *this) priv->next_graph = NULL; need_first_lookup = 1; - while (!priv->child_up) { + while (!priv->event_recvd) { ret = pthread_cond_wait (&priv->sync_cond, &priv->sync_mutex); if (ret != 0) { @@ -3301,7 +3301,7 @@ fuse_graph_setup (xlator_t *this, glusterfs_graph_t *graph) pthread_mutex_lock (&priv->sync_mutex); { priv->next_graph = graph; - priv->child_up = 0; + priv->event_recvd = 0; pthread_cond_signal (&priv->sync_cond); } @@ -3344,10 +3344,11 @@ notify (xlator_t *this, int32_t event, void *data, ...) "failed to setup the graph"); } - if (event == GF_EVENT_CHILD_UP) { + if ((event == GF_EVENT_CHILD_UP) + || (event == GF_EVENT_CHILD_DOWN)) { pthread_mutex_lock (&private->sync_mutex); { - private->child_up = 1; + private->event_recvd = 1; pthread_cond_broadcast (&private->sync_cond); } pthread_mutex_unlock (&private->sync_mutex); @@ -3632,7 +3633,7 @@ init (xlator_t *this_xl) pthread_mutex_init (&priv->fuse_dump_mutex, NULL); pthread_cond_init (&priv->sync_cond, NULL); pthread_mutex_init (&priv->sync_mutex, NULL); - priv->child_up = 0; + priv->event_recvd = 0; for (i = 0; i < FUSE_OP_HIGH; i++) { if (!fuse_std_ops[i]) diff --git a/xlators/mount/fuse/src/fuse-bridge.h b/xlators/mount/fuse/src/fuse-bridge.h index f20e47272..85acab777 100644 --- a/xlators/mount/fuse/src/fuse-bridge.h +++ b/xlators/mount/fuse/src/fuse-bridge.h @@ -91,7 +91,7 @@ struct fuse_private { pthread_cond_t sync_cond; pthread_mutex_t sync_mutex; - char child_up; + char event_recvd; char init_recvd; |