diff options
author | Wanlong Gao <gaowanlong@cn.fujitsu.com> | 2012-08-20 16:17:00 +0800 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-08-21 10:18:23 +0100 |
commit | 11b78a710729c34c1ef921feb119569b7d580877 (patch) | |
tree | 5ceccefad2eab3879c67bb43a0b93891c74f4625 /daemon | |
parent | 5e6727746367ba3f935dccb80109abf8e34fe74d (diff) | |
download | libguestfs-11b78a710729c34c1ef921feb119569b7d580877.tar.gz libguestfs-11b78a710729c34c1ef921feb119569b7d580877.tar.xz libguestfs-11b78a710729c34c1ef921feb119569b7d580877.zip |
New API: xfs: xfs_admin
Add new api xfs_admin to change parameters of an XFS filesystem.
Signed-off-by: Wanlong Gao <gaowanlong@cn.fujitsu.com>
RWMJ:
- Remove printuuid, printlabel, since they don't change any settings.
- Adjusted the documentation.
- Fix the tests.
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/xfs.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/daemon/xfs.c b/daemon/xfs.c index b331b9ba..5f3eaaa5 100644 --- a/daemon/xfs.c +++ b/daemon/xfs.c @@ -460,3 +460,72 @@ error: if (out) free (out); return NULL; } + +int +do_xfs_admin (const char *device, + int extunwritten, int imgfile, int v2log, + int projid32bit, + int lazycounter, const char *label, const char *uuid) +{ + int r; + char *err = NULL; + const char *argv[MAX_ARGS]; + size_t i = 0; + + ADD_ARG (argv, i, "xfs_admin"); + + /* Optional arguments */ + if (!(optargs_bitmask & GUESTFS_XFS_ADMIN_EXTUNWRITTEN_BITMASK)) + extunwritten = 0; + if (!(optargs_bitmask & GUESTFS_XFS_ADMIN_IMGFILE_BITMASK)) + imgfile = 0; + if (!(optargs_bitmask & GUESTFS_XFS_ADMIN_V2LOG_BITMASK)) + v2log = 0; + if (!(optargs_bitmask & GUESTFS_XFS_ADMIN_PROJID32BIT_BITMASK)) + projid32bit = 0; + + if (extunwritten) + ADD_ARG (argv, i, "-e"); + if (imgfile) + ADD_ARG (argv, i, "-f"); + if (v2log) + ADD_ARG (argv, i, "-j"); + if (projid32bit) + ADD_ARG (argv, i, "-p"); + + if (optargs_bitmask & GUESTFS_XFS_ADMIN_LAZYCOUNTER_BITMASK) { + if (lazycounter) { + ADD_ARG (argv, i, "-c"); + ADD_ARG (argv, i, "1"); + } else { + ADD_ARG (argv, i, "-c"); + ADD_ARG (argv, i, "0"); + } + } + + if (optargs_bitmask & GUESTFS_XFS_ADMIN_LABEL_BITMASK) { + ADD_ARG (argv, i, "-L"); + ADD_ARG (argv, i, label); + } + + if (optargs_bitmask & GUESTFS_XFS_ADMIN_UUID_BITMASK) { + ADD_ARG (argv, i, "-U"); + ADD_ARG (argv, i, uuid); + } + + ADD_ARG (argv, i, device); + ADD_ARG (argv, i, NULL); + + r = commandv (NULL, &err, argv); + if (r == -1) { + reply_with_error ("%s: %s", device, err); + goto error; + } + + free (err); + return 0; + +error: + free (err); + return -1; +} |