[Libguestfs] [PATCH 1/5] New API: btrfs_scrub

Hu Tao hutao at cn.fujitsu.com
Mon Jan 12 03:45:02 UTC 2015


On Wed, Jan 07, 2015 at 12:37:48PM +0100, Pino Toscano wrote:
> In data venerdì 26 dicembre 2014 16:17:45, Hu Tao ha scritto:
> > Signed-off-by: Hu Tao <hutao at cn.fujitsu.com>
> > ---
> >  daemon/btrfs.c       | 32 ++++++++++++++++++++++++++++++++
> >  generator/actions.ml | 17 +++++++++++++++++
> >  src/MAX_PROC_NR      |  2 +-
> >  3 files changed, 50 insertions(+), 1 deletion(-)
> > 
> > diff --git a/daemon/btrfs.c b/daemon/btrfs.c
> > index 150c089..79de539 100644
> > --- a/daemon/btrfs.c
> > +++ b/daemon/btrfs.c
> > @@ -1343,3 +1343,35 @@ do_btrfs_qgroup_remove (const char *src, const char *dst, const char *path)
> >  
> >    return 0;
> >  }
> > +
> > +int
> > +do_btrfs_scrub (const char *path)
> > +{
> > +  const size_t MAX_ARGS = 64;
> > +  const char *argv[MAX_ARGS];
> > +  size_t i = 0;
> > +  CLEANUP_FREE char *path_buf = NULL;
> > +  CLEANUP_FREE char *err = NULL;
> > +  CLEANUP_FREE char *out = NULL;
> > +  int r;
> > +
> > +  path_buf = sysroot_path (path);
> > +  if (path_buf == NULL) {
> > +    reply_with_perror ("malloc");
> > +    return -1;
> > +  }
> > +
> > +  ADD_ARG (argv, i, str_btrfs);
> > +  ADD_ARG (argv, i, "scrub");
> > +  ADD_ARG (argv, i, "start");
> > +  ADD_ARG (argv, i, path_buf);
> > +  ADD_ARG (argv, i, NULL);
> > +
> > +  r = commandv (&out, &err, argv);
> > +  if (r == -1) {
> > +    reply_with_error ("%s: %s", path, err);
> > +    return -1;
> > +  }
> > +
> > +  return 0;
> > +}
> 
> Reading the btrfs documentation, it seems like this is an asynchronous
> operation by default, so I'm not sure whether it would be useful to
> just start it without any way to monitor its status.

btrfs balance has the same problem. I'll fix it if possible.

> 
> Also, what would it happen when you start a scrub operation on a
> mounted filesystem, and then you either unmount it or shut down the
> appliance while the scrubbing is still ongoing?

It probably corrupts the filesystem, but let me test it. Do we have any
way to prevent the appliance from being shutdown if there is any async
operation is ongoing?

> 
> Another option could be making it synchronous (start -B), if it doesn't
> take too much time.

I agree with you if the caller of the API doesn't care to wait.

Regards,
Hu




More information about the Libguestfs mailing list