fuse: protect checking/modifying graph->used with a mutex
While reviewing http://review.gluster.org/#/c/9060/ we noticed that fuse checks/modifies graph->used in a unlocked way. There is a potential race in case when fuse_graph_setup() gets called from two different threads (currently unlikely, but poller/notify() might change in future?). In libgfapi we came to the conclusion that each glfs structure can be used to protect the checking/updating of graph->used. In fuse this would be the fuse_private_t with sync_mutex. BUG: 1170643 Change-Id: If5ab5468d22fdb92cfb24a469f538f63f12baf78 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: http://review.gluster.org/9237 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
This commit is contained in:
parent
12c15f47fe
commit
09af313fe6
@ -5032,10 +5032,16 @@ fuse_graph_setup (xlator_t *this, glusterfs_graph_t *graph)
|
||||
if (priv->active_subvol == graph->top)
|
||||
return 0; /* This is a valid case */
|
||||
|
||||
if (graph->used)
|
||||
return 0;
|
||||
pthread_mutex_lock (&priv->sync_mutex);
|
||||
{
|
||||
if (graph->used) {
|
||||
pthread_mutex_unlock (&priv->sync_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
graph->used = 1;
|
||||
graph->used = 1;
|
||||
}
|
||||
pthread_mutex_unlock (&priv->sync_mutex);
|
||||
|
||||
itable = inode_table_new (0, graph->top);
|
||||
if (!itable)
|
||||
|
Loading…
x
Reference in New Issue
Block a user