qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 071/104] virtiofsd: extract root inode init into setup_root()


From: Dr. David Alan Gilbert
Subject: Re: [PATCH 071/104] virtiofsd: extract root inode init into setup_root()
Date: Thu, 16 Jan 2020 15:51:51 +0000
User-agent: Mutt/1.13.0 (2019-11-30)

* Misono Tomohiro (address@hidden) wrote:
> > From: Miklos Szeredi <address@hidden>
> > 
> > Inititialize the root inode in a single place.
> > 
> > Signed-off-by: Miklos Szeredi <address@hidden>
> > Signed-off-by: Stefan Hajnoczi <address@hidden>
> > ---
> >  tools/virtiofsd/passthrough_ll.c | 26 ++++++++++++++++++++++++--
> >  1 file changed, 24 insertions(+), 2 deletions(-)
> > 
> > diff --git a/tools/virtiofsd/passthrough_ll.c 
> > b/tools/virtiofsd/passthrough_ll.c
> > index ef8b88e3d1..0f33c3c5e9 100644
> > --- a/tools/virtiofsd/passthrough_ll.c
> > +++ b/tools/virtiofsd/passthrough_ll.c
> > @@ -2336,6 +2336,29 @@ static void log_func(enum fuse_log_level level, 
> > const char *_fmt, va_list ap)
> >      }
> >  }
> >  
> > +static void setup_root(struct lo_data *lo, struct lo_inode *root)
> > +{
> > +    int fd, res;
> > +    struct stat stat;
> > +
> > +    fd = open("/", O_PATH);
> > +    if (fd == -1) {
> > +        fuse_log(FUSE_LOG_ERR, "open(%s, O_PATH): %m\n", lo->source);
> > +        exit(1);
> > +    }
> > +
> > +    res = fstatat(fd, "", &stat, AT_EMPTY_PATH | AT_SYMLINK_NOFOLLOW);
> > +    if (res == -1) {
> > +        fuse_log(FUSE_LOG_ERR, "fstatat(%s): %m\n", lo->source);
> > +        exit(1);
> > +    }
> > +
> > +    root->fd = fd;
> > +    root->ino = stat.st_ino;
> > +    root->dev = stat.st_dev;
> > +    root->refcount = 2;
> > +}
> > +
> >  int main(int argc, char *argv[])
> >  {
> >      struct fuse_args args = FUSE_ARGS_INIT(argc, argv);
> > @@ -2411,8 +2434,6 @@ int main(int argc, char *argv[])
> >      if (lo.debug) {
> >          current_log_level = FUSE_LOG_DEBUG;
> >      }
> > -    lo.root.refcount = 2;
> > -
> >      if (lo.source) {
> >          struct stat stat;
> >          int res;
> > @@ -2480,6 +2501,7 @@ int main(int argc, char *argv[])
> >  
> >      setup_sandbox(&lo, se, opts.syslog);
> >  
> > +    setup_root(&lo, &lo.root);
> >      /* Block until ctrl+c or fusermount -u */
> >      ret = virtio_loop(se);
> 
> Following block still remains in main():
> 2933    lo.root.is_symlink = false;
> ...
> 2952    lo.root.fd = open(lo.source, O_PATH);
> 2953
> 2954    if (lo.root.fd == -1) {
> 2955        fuse_log(FUSE_LOG_ERR, "open(\"%s\", O_PATH): %m\n", lo.source);
> 2956        exit(1);
> 2957    }
> 
> L.2933 should be included in lo_setup_root() and can we just remove 
> L.2952-2957?

Yes agreed; thanks I've fixed that up.

Dave

> Thanks,
> Misono
> 
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK




reply via email to

[Prev in Thread] Current Thread [Next in Thread]