On Fri, 14 Oct 2011 02:05:02 +0530, Harsh Prateek Bora <ha...@linux.vnet.ibm.com> wrote: > Use QLIST_INSERT_HEAD_RCU and rcu_read_lock/unlock instead of rwlocks. > Use v9fs_synth_mutex as a write-only mutex to handle concurrent writers. > > Signed-off-by: Harsh Prateek Bora <ha...@linux.vnet.ibm.com> > --- > hw/9pfs/virtio-9p-synth.c | 26 ++++++++++++-------------- > 1 files changed, 12 insertions(+), 14 deletions(-) > > diff --git a/hw/9pfs/virtio-9p-synth.c b/hw/9pfs/virtio-9p-synth.c > index cbf74e4..567611e 100644 > --- a/hw/9pfs/virtio-9p-synth.c > +++ b/hw/9pfs/virtio-9p-synth.c > @@ -30,8 +30,7 @@ V9fsSynthNode v9fs_synth_root = { > .attr = &v9fs_synth_root.actual_attr, > }; > > -/*FIXME!! should be converted to qemu_rwlock_t */ > -static pthread_rwlock_t v9fs_synth_mutex; > +static QemuMutex v9fs_synth_mutex; > static int v9fs_synth_node_count; > /* set to 1 when the synth fs is ready */ > static int v9fs_synth_fs; > @@ -79,7 +78,7 @@ int qemu_v9fs_synth_mkdir(V9fsSynthNode *parent, int mode, > if (!parent) { > parent = &v9fs_synth_root; > } > - pthread_rwlock_wrlock(&v9fs_synth_mutex); > + qemu_mutex_lock(&v9fs_synth_mutex); > QLIST_FOREACH(tmp, &parent->child, sibling) { > if (!strcmp(tmp->name, name)) { > ret = EEXIST; > @@ -95,7 +94,7 @@ int qemu_v9fs_synth_mkdir(V9fsSynthNode *parent, int mode, > *result = node; > ret = 0; > err_out: > - pthread_rwlock_unlock(&v9fs_synth_mutex); > + qemu_mutex_unlock(&v9fs_synth_mutex); > return ret;
We sould be using QLIST_INSERT_HEAD_RCU even in v9fs_add_dir_node > } > > @@ -116,7 +115,7 @@ int qemu_v9fs_synth_add_file(V9fsSynthNode *parent, int > mode, > parent = &v9fs_synth_root; > } > -aneesh