[Libguestfs] [PATCH V2] NEW API:xfs:xfs_repair

Richard W.M. Jones rjones at redhat.com
Tue Aug 28 13:06:44 UTC 2012


On Wed, Aug 22, 2012 at 02:41:55PM +0800, Wanlong Gao wrote:
> Add a new api xfs_repair for repairing an XFS filesystem.
> +  ADD_ARG (argv, i, "xfs_repair");
> +

As a matter of style, it might be better to write:

  if (optargs_bitmask & GUESTFS_XFS_REPAIR_FORCELOGZERO_BITMASK) {
    if (forcelogzero)
      ADD_ARG (argv, i, "-L");
  }

It just keeps all the logic in a single place.

> +  if (!(optargs_bitmask & GUESTFS_XFS_REPAIR_IMGFILE_BITMASK))
> +    imgfile = 0;

This xfs_repair -f option is annoying!  Also the way you've defined
the "device" parameter (as type Device) means it won't work -- the
caller would never be able to use a non-device as a parameter.

Instead, can we check for the input being file or device and add the
option automatically?  It should be sufficient to change the code to
something like:

  ... Dev_or_path "device" ...

  if (STRPREFIX (device, "/dev/"))
    is_device = 1;

  if (!is_device) {
    /* do the sysroot adjustment, and add -f parameter */
  } else {
    /* just add device parameter */
  }

> +  if (!(optargs_bitmask & GUESTFS_XFS_REPAIR_NOMODIFY_BITMASK))
> +    nomodify = 0;

OK, but, the return value from xfs_repair is effectively thrown away,
so this parameter would not be useful.  I think you need to use
'commandrv' and do something useful with the return code.  Look at
what the fsck APIs do ...

> +  { defaults with
> +    name = "xfs_repair";
> +    style = RErr, [Device "device"], [OBool "imgfile"; OBool "forcelogzero"; OBool "dangerous"; OBool "nomodify"; OBool "noprefetch"; OBool "forcegeometry"; OInt64 "maxmem"; OInt64 "ihashsize"; OInt64 "bhashsize"; OInt64 "agstride"; OString "logdev"; OString "rtdev"];
> +    proc_nr = Some 350;
> +    optional = Some "xfs";
> +    tests = [
> +      InitEmpty, IfAvailable "xfs", TestRun (
> +        [["part_disk"; "/dev/sda"; "mbr"];
> +         ["mkfs"; "xfs"; "/dev/sda1"; ""; "NOARG"; ""; ""];
> +         ["xfs_repair"; "/dev/sda1"; ""; ""; ""; "true"; ""; ""; ""; ""; ""; ""; "NOARG"; "NOARG"]
> +      ])

A bit light on testing, but the API seems reasonable.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into Xen guests.
http://et.redhat.com/~rjones/virt-p2v




More information about the Libguestfs mailing list