diff options
author | Wanlong Gao <gaowanlong@cn.fujitsu.com> | 2012-05-15 22:29:19 +0800 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-05-15 16:07:45 +0100 |
commit | b9331a2d73f2ce2e424329d35139e68f0fbe8c7a (patch) | |
tree | fb2f0afa7d848fac27a3d149d5e1616007c407f0 /daemon | |
parent | a84d02e8d8fbb7d31cd124cd0eefe56cddeb3045 (diff) | |
download | libguestfs-b9331a2d73f2ce2e424329d35139e68f0fbe8c7a.tar.gz libguestfs-b9331a2d73f2ce2e424329d35139e68f0fbe8c7a.tar.xz libguestfs-b9331a2d73f2ce2e424329d35139e68f0fbe8c7a.zip |
NEW API: add new api btrfs-fsck
Add the new API btrfs-fsck to check the btrfs filesystem.
Btrfs is currently under heavy development, and not suitable for
any uses other than benchmarking and review. But it'll be useful
in the near future.
Signed-off-by: Wanlong Gao <gaowanlong@cn.fujitsu.com>
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/btrfs.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/daemon/btrfs.c b/daemon/btrfs.c index 125dd297..b9b88dd1 100644 --- a/daemon/btrfs.c +++ b/daemon/btrfs.c @@ -619,3 +619,47 @@ do_btrfs_set_seeding (const char *device, int svalue) free (err); return 0; } + +/* Takes optional arguments, consult optargs_bitmask. */ +int +do_btrfs_fsck (const char *device, int64_t superblock, int repair) +{ + char *err; + int r; + size_t i = 0; + const size_t MAX_ARGS = 64; + const char *argv[MAX_ARGS]; + char super_s[64]; + + ADD_ARG (argv, i, "btrfsck"); + + /* Optional arguments. */ + if (optargs_bitmask & GUESTFS_BTRFS_FSCK_SUPERBLOCK_BITMASK) { + if (superblock < 0) { + reply_with_error ("super block offset must be >= 0"); + return -1; + } + snprintf (super_s, sizeof super_s, "%" PRIi64, superblock); + ADD_ARG (argv, i, "--super"); + ADD_ARG (argv, i, super_s); + } + + if (!(optargs_bitmask & GUESTFS_BTRFS_FSCK_REPAIR_BITMASK)) + repair = 0; + + if (repair) + ADD_ARG (argv, i, "--repair"); + + 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); + free (err); + return -1; + } + + free (err); + return 0; +} |