[Libguestfs] [PATCH] NEW API: add new api xfs_info

Wanlong Gao gaowanlong at cn.fujitsu.com
Mon Jul 9 09:15:47 UTC 2012


On 07/09/2012 05:08 PM, Richard W.M. Jones wrote:
> On Mon, Jul 09, 2012 at 04:37:52PM +0800, Wanlong Gao wrote:
>> Add xfs_info to show the geometry of the xfs filesystem.
>>
>> Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com>
>> ---
>>
>> Hi Rich,
>>
>> This patch add xfs_info, and start the
>> xfs support work.
>> I'd like to add the xfs support, like
>> xfs_growfs, xfs_io, xfs_db, xfs_repair etc.
>> Any thoughts?
> 
> Yes, it's a very good idea.
> 
>> Thanks,
>> Wanlong Gao
>>
>>
>>  daemon/Makefile.am             |  1 +
>>  daemon/xfs.c                   | 69 ++++++++++++++++++++++++++++++++++++++++++
>>  generator/generator_actions.ml |  6 ++++
>>  src/MAX_PROC_NR                |  2 +-
>>  5 files changed, 78 insertions(+), 2 deletions(-)
>>  create mode 100644 daemon/xfs.c
>>
>> diff --git a/daemon/Makefile.am b/daemon/Makefile.am
>> index 9e2a633..afe8874 100644
>> --- a/daemon/Makefile.am
>> +++ b/daemon/Makefile.am
>> @@ -165,6 +165,7 @@ guestfsd_SOURCES = \
>>  	utimens.c \
>>  	wc.c \
>>  	xattr.c \
>> +	xfs.c \
>>  	zero.c \
>>  	zerofree.c
>>  guestfsd_LDADD = \
>> diff --git a/daemon/xfs.c b/daemon/xfs.c
>> new file mode 100644
>> index 0000000..8b60b19
>> --- /dev/null
>> +++ b/daemon/xfs.c
>> @@ -0,0 +1,69 @@
>> +/* libguestfs - the guestfsd daemon
>> + * Copyright (C) 2012 Fujitsu Limited.
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License as published by
>> + * the Free Software Foundation; either version 2 of the License, or
>> + * (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + * GNU General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU General Public License
>> + * along with this program; if not, write to the Free Software
>> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>> + */
>> +
>> +#include <config.h>
>> +
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <inttypes.h>
>> +#include <string.h>
>> +#include <unistd.h>
>> +
>> +#include "guestfs_protocol.h"
>> +#include "daemon.h"
>> +#include "c-ctype.h"
>> +#include "actions.h"
>> +
>> +int
>> +optgroup_xfs_available (void)
>> +{
>> +  return prog_exists ("mkfs.xfs");
>> +}
>> +
>> +char *
>> +do_xfs_info (const char *path)
>> +{
>> +  int r;
>> +  char *buf;
>> +  char *out, *err;
>> +
>> +  if (do_is_dir (path)) {
>> +    buf = sysroot_path (path);
>> +    if (!buf) {
>> +      reply_with_perror ("malloc");
>> +      return NULL;
>> +    }
>> +  } else {
>> +    buf = strdup(path);
>> +    if (!buf) {
>> +      reply_with_perror ("strdup");
>> +      return NULL;
>> +    }
>> +  }
>> +
>> +  r = command (&out, &err, "xfs_info", buf, NULL);
>> +  free (buf);
>> +  if (r == -1) {
>> +    reply_with_error ("%s", err);
>> +    free (err);
>> +    free (out);
>> +    return NULL;
>> +  }
>> +
>> +  return out;
> 
> xfs_info has structured output:
> 
>   $ virt-rescue --scratch
>   ><rescue> parted /dev/vda mklabel msdos
>   ><rescue> parted -- /dev/vda mkpart primary 32s -32s
>   ><rescue> mkfs.xfs /dev/vda1 
>   ><rescue> file -bsL /dev/vda1 
>   SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
>   ><rescue> mount /dev/vda1 /sysroot 
>   [  136.526415] SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled
>   [  136.539163] XFS (vda1): Mounting Filesystem
>   [  136.615296] XFS (vda1): Ending clean mount
>   ><rescue> xfs_info /dev/vda1 
>   meta-data=/dev/vda1              isize=256    agcount=4, agsize=655358 blks
>            =                       sectsz=512   attr=2
>   data     =                       bsize=4096   blocks=2621432, imaxpct=25
>            =                       sunit=0      swidth=0 blks
>   naming   =version 2              bsize=4096   ascii-ci=0
>   log      =internal               bsize=4096   blocks=2560, version=2
>            =                       sectsz=512   sunit=0 blks, lazy-count=1
>   realtime =none                   extsz=4096   blocks=0, rtextents=0
> 
> It's weird output, but let's parse and return that instead of dumping
> the problem onto every caller.

Sorry, I can't understand what do you mean here, it's the original output of
xfs_info.

> 
>> +}
>> diff --git a/generator/generator_actions.ml b/generator/generator_actions.ml
>> index 5baa9b2..ba0b0de 100644
>> --- a/generator/generator_actions.ml
>> +++ b/generator/generator_actions.ml
>> @@ -7374,6 +7374,12 @@ be returned if you called C<guestfs_list_devices>.
>>  To find out the maximum number of devices that could be added,
>>  call C<guestfs_max_disks>.");
>>  
>> +  ("xfs_info", (RString "information", [String "path"], []), 337, [Optional "xfs"],
> 
> "path" isn't a string, it's a filename.  And the return type has to
> be changed to reflect the structure being returned.

You mean not a simple string?

> 
>> +   [],
> 
> I think it'd be good to add test(s) here.

Ok, will do.

> 
>> +   "print out the geometry of the filesystem",
> 
> Only for XFS filesystems, so perhaps a better description is:
> 
>   "get geometry of XFS filesystem"

OK, will update.

Thanks,
Wanlong Gao


> 
> Rich.
> 





More information about the Libguestfs mailing list