Hu Tao
2014-Nov-26 09:04 UTC
[Libguestfs] [PATCH v2 0/5] btrfs support part1: subvolume commands
Hi,
This is the part1 of improving btrfs support. This series adds missing
parameters to btrfs_subvolume_snapshot and btrfs_subvolume_create, and
adds two new API btrfs_subvolume_get_default and btrfs_subvolume_show.
Other parts will follow.
Regards,
Hu
changes:
v2:
- add 'once_had_no_optargs = true' for btrfs_subvolume_snapshot and
btrfs_subvolume_create
- improved documents for btrfs_subvolume_snapshot and
btrfs_subvolume_create
- coding style change (patch 5)
- add analyze_line (patch 5)
- rebase
Hu Tao (5):
btrfs: add optional parameter `ro' to btrfs_subvolume_snapshot
btrfs: add optional parameter `qgroupid' to btrfs_subvolume_snapshot
btrfs: add optional parameter `qgroupid' to btrfs_subvolume_create
New API: btrfs_subvolume_get_default
New API: btrfs_subvolume_show
daemon/btrfs.c | 246 ++++++++++++++++++++++++++++++++++++++++++++++++++-
generator/actions.ml | 51 ++++++++---
src/MAX_PROC_NR | 2 +-
3 files changed, 284 insertions(+), 15 deletions(-)
--
1.9.3
Hu Tao
2014-Nov-26 09:04 UTC
[Libguestfs] [PATCH 1/5] btrfs: add optional parameter `ro' to btrfs_subvolume_snapshot
Parameter `ro' is for creating readonly btrfs snapshot.
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
daemon/btrfs.c | 8 +++++++-
generator/actions.ml | 13 ++++++++-----
2 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/daemon/btrfs.c b/daemon/btrfs.c
index 7a4d43d..9b48a5d 100644
--- a/daemon/btrfs.c
+++ b/daemon/btrfs.c
@@ -208,7 +208,7 @@ do_mkfs_btrfs (char *const *devices,
}
int
-do_btrfs_subvolume_snapshot (const char *source, const char *dest)
+do_btrfs_subvolume_snapshot (const char *source, const char *dest, int ro)
{
const size_t MAX_ARGS = 64;
const char *argv[MAX_ARGS];
@@ -231,6 +231,12 @@ do_btrfs_subvolume_snapshot (const char *source, const char
*dest)
ADD_ARG (argv, i, str_btrfs);
ADD_ARG (argv, i, "subvolume");
ADD_ARG (argv, i, "snapshot");
+
+ /* Optional arguments. */
+ if ((optargs_bitmask & GUESTFS_BTRFS_SUBVOLUME_SNAPSHOT_RO_BITMASK)
&&
+ ro)
+ ADD_ARG (argv, i, "-r");
+
ADD_ARG (argv, i, source_buf);
ADD_ARG (argv, i, dest_buf);
ADD_ARG (argv, i, NULL);
diff --git a/generator/actions.ml b/generator/actions.ml
index baa7679..47a98e3 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -10217,8 +10217,9 @@ See C<guestfs_get_e2generation>." };
{ defaults with
name = "btrfs_subvolume_snapshot";
- style = RErr, [Pathname "source"; Pathname "dest"], [];
+ style = RErr, [Pathname "source"; Pathname "dest"],
[OBool "ro"];
proc_nr = Some 322;
+ once_had_no_optargs = true;
optional = Some "btrfs"; camel_name =
"BTRFSSubvolumeSnapshot";
tests = [
InitPartition, Always, TestRun (
@@ -10228,13 +10229,15 @@ See C<guestfs_get_e2generation>." };
["btrfs_subvolume_create"; "/test1"];
["btrfs_subvolume_create"; "/test2"];
["btrfs_subvolume_create"; "/dir/test3"];
- ["btrfs_subvolume_snapshot"; "/dir/test3";
"/dir/test4"]]), []
+ ["btrfs_subvolume_snapshot"; "/dir/test3";
"/dir/test5"; "true"]]), []
];
- shortdesc = "create a writable btrfs snapshot";
+ shortdesc = "create a btrfs snapshot";
longdesc = "\
-Create a writable snapshot of the btrfs subvolume C<source>.
+Create a snapshot of the btrfs subvolume C<source>.
The C<dest> argument is the destination directory and the name
-of the snapshot, in the form C</path/to/dest/name>." };
+of the snapshot, in the form C</path/to/dest/name>. By default
+the newly created snapshot is writable, if the value of optional
+parameter C<ro> is true, then a readonly snapshot is created." };
{ defaults with
name = "btrfs_subvolume_delete";
--
1.9.3
Hu Tao
2014-Nov-26 09:04 UTC
[Libguestfs] [PATCH 2/5] btrfs: add optional parameter `qgroupid' to btrfs_subvolume_snapshot
Parameter `qgroupid' is for adding the created snapshot to a qgroup.
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
daemon/btrfs.c | 8 +++++++-
generator/actions.ml | 9 ++++++---
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/daemon/btrfs.c b/daemon/btrfs.c
index 9b48a5d..2b6735f 100644
--- a/daemon/btrfs.c
+++ b/daemon/btrfs.c
@@ -208,7 +208,8 @@ do_mkfs_btrfs (char *const *devices,
}
int
-do_btrfs_subvolume_snapshot (const char *source, const char *dest, int ro)
+do_btrfs_subvolume_snapshot (const char *source, const char *dest, int ro,
+ const char *qgroupid)
{
const size_t MAX_ARGS = 64;
const char *argv[MAX_ARGS];
@@ -237,6 +238,11 @@ do_btrfs_subvolume_snapshot (const char *source, const char
*dest, int ro)
ro)
ADD_ARG (argv, i, "-r");
+ if (optargs_bitmask & GUESTFS_BTRFS_SUBVOLUME_SNAPSHOT_QGROUPID_BITMASK)
{
+ ADD_ARG (argv, i, "-i");
+ ADD_ARG (argv, i, qgroupid);
+ }
+
ADD_ARG (argv, i, source_buf);
ADD_ARG (argv, i, dest_buf);
ADD_ARG (argv, i, NULL);
diff --git a/generator/actions.ml b/generator/actions.ml
index 47a98e3..e2b3cf5 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -10217,7 +10217,7 @@ See C<guestfs_get_e2generation>." };
{ defaults with
name = "btrfs_subvolume_snapshot";
- style = RErr, [Pathname "source"; Pathname "dest"],
[OBool "ro"];
+ style = RErr, [Pathname "source"; Pathname "dest"],
[OBool "ro"; OString "qgroupid"];
proc_nr = Some 322;
once_had_no_optargs = true;
optional = Some "btrfs"; camel_name =
"BTRFSSubvolumeSnapshot";
@@ -10229,7 +10229,8 @@ See C<guestfs_get_e2generation>." };
["btrfs_subvolume_create"; "/test1"];
["btrfs_subvolume_create"; "/test2"];
["btrfs_subvolume_create"; "/dir/test3"];
- ["btrfs_subvolume_snapshot"; "/dir/test3";
"/dir/test5"; "true"]]), []
+ ["btrfs_subvolume_snapshot"; "/dir/test3";
"/dir/test5"; "true"; "NOARG"];
+ ["btrfs_subvolume_snapshot"; "/dir/test3";
"/dir/test6"; ""; "0/1000"]]), []
];
shortdesc = "create a btrfs snapshot";
longdesc = "\
@@ -10237,7 +10238,9 @@ Create a snapshot of the btrfs subvolume
C<source>.
The C<dest> argument is the destination directory and the name
of the snapshot, in the form C</path/to/dest/name>. By default
the newly created snapshot is writable, if the value of optional
-parameter C<ro> is true, then a readonly snapshot is created." };
+parameter C<ro> is true, then a readonly snapshot is created. The
+optional parameter C<qgroupid> represents the qgroup which the
+newly created snapshot will be added to." };
{ defaults with
name = "btrfs_subvolume_delete";
--
1.9.3
Hu Tao
2014-Nov-26 09:04 UTC
[Libguestfs] [PATCH 3/5] btrfs: add optional parameter `qgroupid' to btrfs_subvolume_create
Parameter `qgroupid' is for adding the created subvolume to a qgroup.
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
daemon/btrfs.c | 10 +++++++++-
generator/actions.ml | 17 ++++++++++-------
2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/daemon/btrfs.c b/daemon/btrfs.c
index 2b6735f..754fdcd 100644
--- a/daemon/btrfs.c
+++ b/daemon/btrfs.c
@@ -288,7 +288,7 @@ do_btrfs_subvolume_delete (const char *subvolume)
}
int
-do_btrfs_subvolume_create (const char *dest)
+do_btrfs_subvolume_create (const char *dest, const char *qgroupid)
{
const size_t MAX_ARGS = 64;
const char *argv[MAX_ARGS];
@@ -306,6 +306,14 @@ do_btrfs_subvolume_create (const char *dest)
ADD_ARG (argv, i, str_btrfs);
ADD_ARG (argv, i, "subvolume");
ADD_ARG (argv, i, "create");
+
+ /* Optional arguments. */
+ if (optargs_bitmask & GUESTFS_BTRFS_SUBVOLUME_CREATE_QGROUPID_BITMASK) {
+ ADD_ARG (argv, i, "-i");
+ ADD_ARG (argv, i, qgroupid);
+ }
+
+
ADD_ARG (argv, i, dest_buf);
ADD_ARG (argv, i, NULL);
diff --git a/generator/actions.ml b/generator/actions.ml
index e2b3cf5..a35fe50 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -10226,9 +10226,9 @@ See C<guestfs_get_e2generation>." };
[["mkfs_btrfs"; "/dev/sda1"; "";
""; "NOARG"; ""; "NOARG";
"NOARG"; ""; ""];
["mount"; "/dev/sda1"; "/"];
["mkdir"; "/dir"];
- ["btrfs_subvolume_create"; "/test1"];
- ["btrfs_subvolume_create"; "/test2"];
- ["btrfs_subvolume_create"; "/dir/test3"];
+ ["btrfs_subvolume_create"; "/test1";
"NOARG"];
+ ["btrfs_subvolume_create"; "/test2";
"NOARG"];
+ ["btrfs_subvolume_create"; "/dir/test3";
"NOARG"];
["btrfs_subvolume_snapshot"; "/dir/test3";
"/dir/test5"; "true"; "NOARG"];
["btrfs_subvolume_snapshot"; "/dir/test3";
"/dir/test6"; ""; "0/1000"]]), []
];
@@ -10251,7 +10251,7 @@ newly created snapshot will be added to." };
InitPartition, Always, TestRun (
[["mkfs_btrfs"; "/dev/sda1"; "";
""; "NOARG"; ""; "NOARG";
"NOARG"; ""; ""];
["mount"; "/dev/sda1"; "/"];
- ["btrfs_subvolume_create"; "/test1"];
+ ["btrfs_subvolume_create"; "/test1";
"NOARG"];
["btrfs_subvolume_delete"; "/test1"]]), []
];
shortdesc = "delete a btrfs subvolume or snapshot";
@@ -10260,13 +10260,16 @@ Delete the named btrfs subvolume or snapshot." };
{ defaults with
name = "btrfs_subvolume_create";
- style = RErr, [Pathname "dest"], [];
+ style = RErr, [Pathname "dest"], [OString "qgroupid"];
proc_nr = Some 324;
+ once_had_no_optargs = true;
optional = Some "btrfs"; camel_name =
"BTRFSSubvolumeCreate";
shortdesc = "create a btrfs subvolume";
longdesc = "\
Create a btrfs subvolume. The C<dest> argument is the destination
-directory and the name of the subvolume, in the form
C</path/to/dest/name>." };
+directory and the name of the subvolume, in the form
C</path/to/dest/name>.
+The optional parameter C<qgroupid> represents the qgroup which the newly
+created subvolume will be added to." };
{ defaults with
name = "btrfs_subvolume_list";
@@ -10300,7 +10303,7 @@ get a list of subvolumes." };
InitPartition, Always, TestRun (
[["mkfs_btrfs"; "/dev/sda1"; "";
""; "NOARG"; ""; "NOARG";
"NOARG"; ""; ""];
["mount"; "/dev/sda1"; "/"];
- ["btrfs_subvolume_create"; "/test1"];
+ ["btrfs_subvolume_create"; "/test1";
"NOARG"];
["btrfs_filesystem_sync"; "/test1"];
["btrfs_filesystem_balance"; "/test1"]]), []
];
--
1.9.3
Hu Tao
2014-Nov-26 09:04 UTC
[Libguestfs] [PATCH 4/5] New API: btrfs_subvolume_get_default
btrfs_subvolume_get_default is for getting the default subvolume of
a btrfs filesystem.
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
daemon/btrfs.c | 38 ++++++++++++++++++++++++++++++++++++++
generator/actions.ml | 9 +++++++++
src/MAX_PROC_NR | 2 +-
3 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/daemon/btrfs.c b/daemon/btrfs.c
index 754fdcd..471cfbd 100644
--- a/daemon/btrfs.c
+++ b/daemon/btrfs.c
@@ -545,6 +545,44 @@ do_btrfs_subvolume_set_default (int64_t id, const char *fs)
return 0;
}
+int64_t
+do_btrfs_subvolume_get_default (const char *mountpoint)
+{
+ const size_t MAX_ARGS = 64;
+ const char *argv[MAX_ARGS];
+ size_t i = 0;
+ CLEANUP_FREE char *fs_buf = NULL;
+ CLEANUP_FREE char *err = NULL;
+ CLEANUP_FREE char *out = NULL;
+ int r;
+ int64_t ret;
+
+ fs_buf = sysroot_path (mountpoint);
+ if (fs_buf == NULL) {
+ reply_with_perror ("malloc");
+ return -1;
+ }
+
+ ADD_ARG (argv, i, str_btrfs);
+ ADD_ARG (argv, i, "subvolume");
+ ADD_ARG (argv, i, "get-default");
+ ADD_ARG (argv, i, fs_buf);
+ ADD_ARG (argv, i, NULL);
+
+ r = commandv (&out, &err, argv);
+ if (r == -1) {
+ reply_with_error ("%s: %s", mountpoint, err);
+ return -1;
+ }
+ r = xstrtol (out + 2, NULL, 10, &ret, NULL);
+ if (r != LONGINT_OK) {
+ reply_with_error ("%s: could not parse subvolume id: %s.",
argv[0], out);
+ return -1;
+ }
+
+ return ret;
+}
+
int
do_btrfs_filesystem_sync (const char *fs)
{
diff --git a/generator/actions.ml b/generator/actions.ml
index a35fe50..2dcf938 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -12026,6 +12026,15 @@ Set readahead (in 512-byte sectors) for the device.
This uses the L<blockdev(8)> command." };
+ { defaults with
+ name = "btrfs_subvolume_get_default";
+ style = RInt64 "id", [Pathname "mountpoint"], [];
+ proc_nr = Some 425;
+ optional = Some "btrfs"; camel_name =
"BTRFSSubvolumeGetDefault";
+ shortdesc = "get the default subvolume or snapshot of a
filesystem";
+ longdesc = "\
+Get the default subvolume or snapshot of a filesystem mounted at
C<mountpoint>." };
+
]
(* Non-API meta-commands available only in guestfish.
diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR
index 9524ef4..5e4a522 100644
--- a/src/MAX_PROC_NR
+++ b/src/MAX_PROC_NR
@@ -1 +1 @@
-424
+425
--
1.9.3
btrfs_subvolume_show shows the detailed information of a subvolume or
snapshot.
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
daemon/btrfs.c | 184 +++++++++++++++++++++++++++++++++++++++++++++++++++
generator/actions.ml | 9 +++
src/MAX_PROC_NR | 2 +-
3 files changed, 194 insertions(+), 1 deletion(-)
diff --git a/daemon/btrfs.c b/daemon/btrfs.c
index 471cfbd..b6b2804 100644
--- a/daemon/btrfs.c
+++ b/daemon/btrfs.c
@@ -24,11 +24,13 @@
#include <pcre.h>
#include <string.h>
#include <unistd.h>
+#include <assert.h>
#include "daemon.h"
#include "actions.h"
#include "optgroups.h"
#include "xstrtol.h"
+#include "c-ctype.h"
GUESTFSD_EXT_CMD(str_btrfs, btrfs);
GUESTFSD_EXT_CMD(str_btrfstune, btrfstune);
@@ -810,3 +812,185 @@ do_btrfs_fsck (const char *device, int64_t superblock, int
repair)
return 0;
}
+
+/* analyze_line: analyze one line contains key:value pair.
+ * returns the next position following \n.
+ */
+static char *analyze_line (char *line, char **key, char **value)
+{
+ char *p = line;
+ char *next = NULL;
+ char delimiter = ':';
+ char *del_pos = NULL;
+
+ if (!line || *line == '\0') {
+ *key = NULL;
+ *value = NULL;
+ return NULL;
+ }
+
+ next = strchr (p, '\n');
+ if (next) {
+ *next = '\0';
+ ++next;
+ }
+
+ /* leading spaces and tabs */
+ while (*p && c_isspace (*p))
+ ++p;
+
+ assert (key);
+ if (*p == delimiter)
+ *key = NULL;
+ else
+ *key = p;
+
+ del_pos = strchr (p, delimiter);
+ if (del_pos) {
+ *del_pos = '\0';
+ ++del_pos;
+ /* leading spaces and tabs */
+ while (*del_pos && c_isspace (*del_pos))
+ ++del_pos;
+ assert (value);
+ *value = del_pos;
+ } else
+ *value = NULL;
+
+ return next;
+}
+
+char **do_btrfs_subvolume_show (const char *subvolume)
+{
+ const size_t MAX_ARGS = 64;
+ const char *argv[MAX_ARGS];
+ size_t i = 0;
+ CLEANUP_FREE char *subvolume_buf = NULL;
+ CLEANUP_FREE char *err = NULL;
+ CLEANUP_FREE char *out = NULL;
+ char *p, *key = NULL, *value = NULL;
+ DECLARE_STRINGSBUF (ret);
+ int r;
+
+ subvolume_buf = sysroot_path (subvolume);
+ if (subvolume_buf == NULL) {
+ reply_with_perror ("malloc");
+ return NULL;
+ }
+
+ ADD_ARG (argv, i, str_btrfs);
+ ADD_ARG (argv, i, "subvolume");
+ ADD_ARG (argv, i, "show");
+ ADD_ARG (argv, i, subvolume_buf);
+ ADD_ARG (argv, i, NULL);
+
+ r = commandv (&out, &err, argv);
+ if (r == -1) {
+ reply_with_error ("%s: %s", subvolume, err);
+ return NULL;
+ }
+
+ /* Output is:
+ *
+ * /
+ * Name: root
+ * uuid: c875169e-cf4e-a04d-9959-b667dec36234
+ * Parent uuid: -
+ * Creation time: 2014-11-13 10:13:08
+ * Object ID: 256
+ * Generation (Gen): 6579
+ * Gen at creation: 5
+ * Parent: 5
+ * Top Level: 5
+ * Flags: -
+ * Snapshot(s):
+ * snapshots/test1
+ * snapshots/test2
+ * snapshots/test3
+ *
+ */
+ p = analyze_line(out, &key, &value);
+ if (!p) {
+ reply_with_error ("truncated output: %s", out);
+ return NULL;
+ }
+
+ /* If the path is the btrfs root, `btrfs subvolume show' reports:
+ * <path> is btrfs root
+ */
+ if (strstr (key, "is btrfs root") != NULL) {
+ reply_with_error ("%s is btrfs root", subvolume);
+ return NULL;
+ }
+
+ /* The first line is the path of the subvolume. */
+ if (key && !value) {
+ if (add_string (&ret, "path") == -1)
+ return NULL;
+ if (add_string (&ret, key) == -1)
+ return NULL;
+ } else {
+ if (add_string (&ret, key) == -1)
+ return NULL;
+ if (add_string (&ret, value) == -1)
+ return NULL;
+ }
+
+ /* Read the lines and split into "key: value". */
+ p = analyze_line(p, &key, &value);
+ while (key) {
+ /* snapshot is special, see the output above */
+ if (!STREQLEN (key, "Snapshot(s)", sizeof
("Snapshot(s)") - 1)) {
+ if (add_string (&ret, key ? key : "") == -1)
+ return NULL;
+ if (value) {
+ if (add_string (&ret, value) == -1)
+ return NULL;
+ } else {
+ if (add_string (&ret, "") == -1)
+ return NULL;
+ }
+
+ p = analyze_line(p, &key, &value);
+ } else {
+ char *ss = NULL;
+ int ss_len = 0;
+
+ if (add_string (&ret, key) == -1)
+ return NULL;
+
+ p = analyze_line(p, &key, &value);
+
+ while (key && !value) {
+ ss = realloc (ss, ss_len + strlen (key) + 1);
+ if (!ss)
+ return NULL;
+
+ if (ss_len != 0)
+ ss[ss_len++] = ',';
+
+ memcpy (ss + ss_len, key, strlen (key));
+ ss_len += strlen (key);
+ ss[ss_len] = '\0';
+
+ p = analyze_line(p, &key, &value);
+ }
+
+ if (ss) {
+ if (add_string_nodup (&ret, ss) == -1) {
+ free (ss);
+ return NULL;
+ }
+ } else {
+ if (add_string (&ret, "") == -1)
+ return NULL;
+ }
+ }
+ }
+
+ if (end_stringsbuf (&ret) == -1)
+ return NULL;
+
+ return ret.argv;
+
+}
diff --git a/generator/actions.ml b/generator/actions.ml
index 2dcf938..754b275 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -12035,6 +12035,15 @@ This uses the L<blockdev(8)> command." };
longdesc = "\
Get the default subvolume or snapshot of a filesystem mounted at
C<mountpoint>." };
+ { defaults with
+ name = "btrfs_subvolume_show";
+ style = RHashtable "btrfssubvolumeinfo", [Pathname
"subvolume"], [];
+ proc_nr = Some 426;
+ optional = Some "btrfs"; camel_name =
"BTRFSSubvolumeShow";
+ shortdesc = "return detailed information of the subvolume";
+ longdesc = "\
+Return detailed information of the subvolume." };
+
]
(* Non-API meta-commands available only in guestfish.
diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR
index 5e4a522..9f51d08 100644
--- a/src/MAX_PROC_NR
+++ b/src/MAX_PROC_NR
@@ -1 +1 @@
-425
+426
--
1.9.3
Pino Toscano
2014-Nov-26 16:45 UTC
Re: [Libguestfs] [PATCH v2 0/5] btrfs support part1: subvolume commands
On Wednesday 26 November 2014 17:04:03 Hu Tao wrote:> This is the part1 of improving btrfs support. This series adds missing > parameters to btrfs_subvolume_snapshot and btrfs_subvolume_create, and > adds two new API btrfs_subvolume_get_default and btrfs_subvolume_show. > > Other parts will follow. > > Regards, > Hu > > changes: > v2: > - add 'once_had_no_optargs = true' for btrfs_subvolume_snapshot and > btrfs_subvolume_create > - improved documents for btrfs_subvolume_snapshot and > btrfs_subvolume_create > - coding style change (patch 5) > - add analyze_line (patch 5) > - rebase > > > Hu Tao (5): > btrfs: add optional parameter `ro' to btrfs_subvolume_snapshot > btrfs: add optional parameter `qgroupid' to btrfs_subvolume_snapshot > btrfs: add optional parameter `qgroupid' to btrfs_subvolume_createThese three patches were fine, so I pushed them, thanks! Please make sure to also include changes to gobject/Makefile.inc and po/POTFILES together in the same commit that changes them. -- Pino Toscano
Hu Tao
2014-Nov-27 05:52 UTC
Re: [Libguestfs] [PATCH v2 0/5] btrfs support part1: subvolume commands
On Wed, Nov 26, 2014 at 05:45:58PM +0100, Pino Toscano wrote:> On Wednesday 26 November 2014 17:04:03 Hu Tao wrote: > > This is the part1 of improving btrfs support. This series adds missing > > parameters to btrfs_subvolume_snapshot and btrfs_subvolume_create, and > > adds two new API btrfs_subvolume_get_default and btrfs_subvolume_show. > > > > Other parts will follow. > > > > Regards, > > Hu > > > > changes: > > v2: > > - add 'once_had_no_optargs = true' for btrfs_subvolume_snapshot and > > btrfs_subvolume_create > > - improved documents for btrfs_subvolume_snapshot and > > btrfs_subvolume_create > > - coding style change (patch 5) > > - add analyze_line (patch 5) > > - rebase > > > > > > Hu Tao (5): > > btrfs: add optional parameter `ro' to btrfs_subvolume_snapshot > > btrfs: add optional parameter `qgroupid' to btrfs_subvolume_snapshot > > btrfs: add optional parameter `qgroupid' to btrfs_subvolume_create > > These three patches were fine, so I pushed them, thanks! > > Please make sure to also include changes to gobject/Makefile.inc and > po/POTFILES together in the same commit that changes them.Okay, I'll resend the other two. Regards, Hu
Reasonably Related Threads
- [PATCH 0/6] btrfs support part1: subvolume commands
- Re: [PATCH 4/6] btrfs: add optional parameter `qgroupid' to btrfs_subvolume_create
- [PATCH v3 00/11] btrfs support part2: qgroup/quota commands
- [PATCH v2 00/11] btrfs support part2: qgroup/quota commands
- Re: [PATCH 4/6] btrfs: add optional parameter `qgroupid' to btrfs_subvolume_create