summaryrefslogtreecommitdiffstats
path: root/daemon
diff options
context:
space:
mode:
authorWanlong Gao <gaowanlong@cn.fujitsu.com>2012-08-20 16:17:00 +0800
committerRichard W.M. Jones <rjones@redhat.com>2012-08-21 10:18:23 +0100
commit11b78a710729c34c1ef921feb119569b7d580877 (patch)
tree5ceccefad2eab3879c67bb43a0b93891c74f4625 /daemon
parent5e6727746367ba3f935dccb80109abf8e34fe74d (diff)
downloadlibguestfs-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.c69
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;
+}