[Virtio-fs] [PATCH] virtiofsd: During setup mapping, open file O_RDWR only if needed

Dr. David Alan Gilbert dgilbert at redhat.com
Thu Jul 25 15:48:22 UTC 2019


* Vivek Goyal (vgoyal at redhat.com) wrote:
> On Thu, Jul 25, 2019 at 02:27:43PM +0100, Dr. David Alan Gilbert wrote:
> > * Liu Bo (bo.liu at linux.alibaba.com) wrote:
> > > On Wed, Jul 24, 2019 at 05:10:24PM -0400, Vivek Goyal wrote:
> > > > As of now we always open file O_RDWR (even if writable mappings are not
> > > > required). This leads to copy up of file if file is backed by overlayfs
> > > > and hence nullying advantages of overlayfs.
> > > > 
> > > > So open file O_RDONLY if writable mappings are not required. Open O_RDWR
> > > > if writable mappings are needed.
> > > > 
> > > > Signed-off-by: Vivek Goyal <vgoyal at redhat.com>
> > > > ---
> > > >  contrib/virtiofsd/passthrough_ll.c |    9 ++++++---
> > > >  1 file changed, 6 insertions(+), 3 deletions(-)
> > > > 
> > > > Index: qemu/contrib/virtiofsd/passthrough_ll.c
> > > > ===================================================================
> > > > --- qemu.orig/contrib/virtiofsd/passthrough_ll.c	2019-07-24 16:31:07.014871768 -0400
> > > > +++ qemu/contrib/virtiofsd/passthrough_ll.c	2019-07-24 16:32:10.064412722 -0400
> > > > @@ -2197,15 +2197,15 @@ static void lo_setupmapping(fuse_req_t r
> > > >          VhostUserFSSlaveMsg msg = { 0 };
> > > >          uint64_t vhu_flags;
> > > >  	char *buf;
> > > > +	bool writable = flags & FUSE_SETUPMAPPING_FLAG_WRITE;
> > > 
> > > typo? flags is set to O_WRONLY or 0 in do_lookup, although this may work as same.
> > 
> > Right; that should be O_WRONLY;  
> > do_setupmapping does:
> > 
> >         genflags = 0;
> >         genflags |= (arg->flags & FUSE_SETUPMAPPING_FLAG_WRITE) ? O_WRONLY : 0;
> > 
> > to convert from the fuse definition on the wire to the O_ notation
> > before calling the filesstem code.
> 
> So I have two questions.
> 
> - O_WRONLY does not sound like correct mapping. FUSE_SETUPMAPPING_FLAG_WRITE
>   only says that write behavior is required. It does not say *write only*.

True, we should make it end up as O_RDONLY or O_RDWR.

> - Is it must that we need to translate fuse message specific flag
>   to O_* notation. How about let filesystem code parse it?

I think all of the decoding of wire protocol is done in fuse_lowlevel,
it tries not to pass protocol down.

Dave

> Thanks
> Vivek
--
Dr. David Alan Gilbert / dgilbert at redhat.com / Manchester, UK




More information about the Virtio-fs mailing list