From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Vivek Goyal <vgoyal@redhat.com>
Cc: virtio-fs@redhat.com, Miklos Szeredi <mszeredi@redhat.com>
Subject: Re: [Virtio-fs] [RFC PATCH] virtiofsd: Provide support for posix locks
Date: Fri, 7 Jun 2019 19:30:40 +0100 [thread overview]
Message-ID: <20190607183039.GX2631@work-vm> (raw)
In-Reply-To: <20190607182129.GB23125@redhat.com>
* Vivek Goyal (vgoyal@redhat.com) wrote:
> On Fri, Jun 07, 2019 at 04:15:18PM +0100, Dr. David Alan Gilbert wrote:
> [..]
> > > Index: qemu/contrib/virtiofsd/passthrough_ll.c
> > > ===================================================================
> > > --- qemu.orig/contrib/virtiofsd/passthrough_ll.c 2019-04-25 10:49:14.103386416 -0400
> > > +++ qemu/contrib/virtiofsd/passthrough_ll.c 2019-05-30 14:02:55.598483536 -0400
> > > @@ -58,6 +58,12 @@
> > > #include <gmodule.h>
> > > #include "seccomp.h"
> > >
> > > +/* Keep track of inode posix locks for each owner. */
> > > +struct lo_inode_plock {
> > > + uint64_t lock_owner;
> > > + int fd; /* fd for OFD locks */
> > > +};
> > > +
> > > struct lo_map_elem {
> > > union {
> > > struct lo_inode *inode;
> > > @@ -86,6 +92,8 @@ struct lo_inode {
> > > struct lo_key key;
> > > uint64_t refcount; /* protected by lo->mutex */
> > > fuse_ino_t fuse_ino;
> > > + pthread_mutex_t mutex;
> >
> > If this mutex is purely for posix_locks then there's probably a better
> > name.
>
> Hi Dave,
>
> As of now it is only for posix locks. But it could be used for locking
> other inode specific data structures as well. That's why I left it with
> a generic name. But if it bothers you, I can open to change the name
> to something else.
Well the important thing is that it's not the whole lo_inode; someone
who didn't know the code might think it was.
> [..]
> > > @@ -1038,6 +1064,10 @@ static void unref_inode(struct lo_data *
> > > if (!inode->refcount) {
> > > lo_map_remove(&lo->ino_map, inode->fuse_ino);
> > > g_hash_table_remove(lo->inodes, &inode->key);
> > > + if (g_hash_table_size(inode->posix_locks)) {
> > > + warn("Hash table is not empty\n");
> > > + }
> > > + g_hash_table_destroy(inode->posix_locks);
> > > pthread_mutex_unlock(&lo->mutex);
> > > close(inode->fd);
> >
> > pthread_mutex_destroy(&inode->mutex) ?
>
> So is it necessary to call this? Is it about that if same inode is
> allocated next time and if we call pthread_mutex_init(), it might
> have issues?
>
> IOW, trying to understand why one should call pthread_mutex_destroy()
> before freeing inode.
My understanding is that it's always best to destroy a mutex before
freeing the memory it's allocated in.
Dave
> Vivek
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
prev parent reply other threads:[~2019-06-07 18:30 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-30 18:11 [Virtio-fs] [RFC PATCH] virtiofsd: Provide support for posix locks Vivek Goyal
2019-05-30 18:45 ` Liu Bo
2019-05-30 18:50 ` Vivek Goyal
2019-05-30 19:00 ` Liu Bo
2019-05-30 19:11 ` Dr. David Alan Gilbert
2019-06-07 15:15 ` Dr. David Alan Gilbert
2019-06-07 18:21 ` Vivek Goyal
2019-06-07 18:30 ` Dr. David Alan Gilbert [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190607183039.GX2631@work-vm \
--to=dgilbert@redhat.com \
--cc=mszeredi@redhat.com \
--cc=vgoyal@redhat.com \
--cc=virtio-fs@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.