Skip to content

Commit

Permalink
New API: btrfs-filesystem-resize (RHBZ#721160).
Browse files Browse the repository at this point in the history
This resizes a btrfs filesystem.
  • Loading branch information
rwmjones committed Jul 14, 2011
1 parent 08910ee commit a001a0d
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 1 deletion.
1 change: 1 addition & 0 deletions daemon/Makefile.am
Expand Up @@ -95,6 +95,7 @@ guestfsd_SOURCES = \
base64.c \
blkid.c \
blockdev.c \
btrfs.c \
checksum.c \
cmp.c \
command.c \
Expand Down
84 changes: 84 additions & 0 deletions daemon/btrfs.c
@@ -0,0 +1,84 @@
/* libguestfs - the guestfsd daemon
* Copyright (C) 2011 Red Hat Inc.
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include <config.h>

#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <string.h>
#include <unistd.h>

#include "daemon.h"
#include "actions.h"
#include "optgroups.h"

int
optgroup_btrfs_available (void)
{
return prog_exists ("btrfs");
}

/* Takes optional arguments, consult optargs_bitmask. */
int
do_btrfs_filesystem_resize (const char *filesystem, int64_t size)
{
char *buf;
char *err;
int r;
const char *argv[16];
size_t i = 0;
char size_str[32];

argv[i++] = "btrfs";
argv[i++] = "filesystem";
argv[i++] = "resize";

if (optargs_bitmask & GUESTFS_BTRFS_FILESYSTEM_RESIZE_SIZE_BITMASK) {
if (size <= 0) {
reply_with_error ("size is zero or negative");
return -1;
}

snprintf (size_str, sizeof size_str, "%" PRIi64, size);
argv[i++] = size_str;
}
else
argv[i++] = "max";

buf = sysroot_path (filesystem);
if (!buf) {
reply_with_error ("malloc");
return -1;
}

argv[i++] = buf;
argv[i++] = NULL;

r = commandv (NULL, &err, argv);
free (buf);

if (r == -1) {
reply_with_error ("%s: %s", filesystem, err);
free (err);
return -1;
}

free (err);
return 0;
}
23 changes: 23 additions & 0 deletions generator/generator_actions.ml
Expand Up @@ -6043,6 +6043,29 @@ single filesystem without booting into Windows between each resize.
See also L<ntfsresize(8)>.");

("btrfs_filesystem_resize", (RErr, [Pathname "mountpoint"], [Int64 "size"]), 289, [Optional "btrfs"],
[],
"resize a btrfs filesystem",
"\
This command resizes a btrfs filesystem.
Note that unlike other resize calls, the filesystem has to be
mounted and the parameter is the mountpoint not the device
(this is a requirement of btrfs itself).
The optional parameters are:
=over 4
=item C<size>
The new size (in bytes) of the filesystem. If omitted, the filesystem
is resized to the maximum size.
=back
See also L<btrfs(8)>.");

]

let all_functions = non_daemon_functions @ daemon_functions
Expand Down
1 change: 1 addition & 0 deletions po/POTFILES.in
Expand Up @@ -7,6 +7,7 @@ daemon/available.c
daemon/base64.c
daemon/blkid.c
daemon/blockdev.c
daemon/btrfs.c
daemon/checksum.c
daemon/cmp.c
daemon/command.c
Expand Down
2 changes: 1 addition & 1 deletion src/MAX_PROC_NR
@@ -1 +1 @@
288
289

0 comments on commit a001a0d

Please sign in to comment.