* Vivek Goyal ([email protected]) wrote:
> On Thu, Jul 25, 2019 at 02:27:43PM +0100, Dr. David Alan Gilbert wrote:
> > * Liu Bo ([email protected]) 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 <[email protected]>
> > > > ---
> > > >  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 / [email protected] / Manchester, UK

Reply via email to