In data venerdì 26 giugno 2015 17:35:44, Chen Hanxiao ha scritto:
Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com> --- daemon/uuids.c | 31 +++++++++++++++++++++++++++++++ generator/actions.ml | 16 ++++++++++++++++ src/MAX_PROC_NR | 2 +- tests/btrfs/test-btrfs-misc.pl | 11 +++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-)
diff --git a/daemon/uuids.c b/daemon/uuids.c index 5238f3e..4530491 100644 --- a/daemon/uuids.c +++ b/daemon/uuids.c @@ -85,3 +85,34 @@ do_set_uuid (const char *device, const char *uuid)
return r; } + +int +do_set_uuid_random (const char *device) +{ + int r; + + /* How we set the UUID depends on the filesystem type. */ + CLEANUP_FREE char *vfs_type = get_blkid_tag (device, "TYPE"); + if (vfs_type == NULL) + return -1; + + if (fstype_is_extfs (vfs_type)) + r = set_e2uuid_random (device); + + else if (STREQ (vfs_type, "xfs")) + r = xfs_set_uuid_random (device); + + else if (STREQ (vfs_type, "swap")) + r = swap_set_uuid_random (device); + + else if (STREQ (vfs_type, "btrfs")) + r = btrfs_set_uuid_random (device); + + else { + reply_with_error ("don't know how to set the random UUID for '%s' filesystems", + vfs_type); + r = -1;
Being a new API, we could make this return ENOTSUP, documenting this error on unsupported filesystems. This way, users could know an error is due to a filesystem not supported by this API, instead of a real failure of one of the programs used.
+ } + + return r; +} diff --git a/generator/actions.ml b/generator/actions.ml index d5e5ccf..0328858 100644 --- a/generator/actions.ml +++ b/generator/actions.ml @@ -12593,6 +12593,22 @@ numbered C<partnum> on device C<device>.
It returns C<primary>, C<logical>, or C<extended>." };
+ { defaults with + name = "set_uuid_random"; added = (1, 29, 47); + style = RErr, [Device "device"], []; + proc_nr = Some 455; + tests = [ + InitBasicFS, Always, TestRun ( + [["set_uuid_random"; "/dev/sda1"]]), []; + ]; + shortdesc = "set the random filesystem UUID";
This sounds like it is setting some particular random UUID. I'd be better as "set a random UUID for the filesystem"
+ longdesc = "\ +Set the filesystem UUID on C<device> to a random UUID. + +Only some filesystem types support setting UUIDs. + +To read the UUID on a filesystem, call C<guestfs_vfs_uuid>." }; + ]
(* Non-API meta-commands available only in guestfish. diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR index 515f19a..4930863 100644 --- a/src/MAX_PROC_NR +++ b/src/MAX_PROC_NR @@ -1 +1 @@ -454 +455 diff --git a/tests/btrfs/test-btrfs-misc.pl b/tests/btrfs/test-btrfs-misc.pl index b47caab..4982f0d 100755 --- a/tests/btrfs/test-btrfs-misc.pl +++ b/tests/btrfs/test-btrfs-misc.pl @@ -64,5 +64,16 @@ if ($err == 0) { warn "$0: skipping test for btrfs UUID change feature is not available\n"; }
+# Setting btrfs random UUID. +eval { + $g->set_uuid_random ("/dev/sda1") +}; +# FIXME: ignore ESRCH
What is ESRCH about?
+my $err = $g->last_errno (); + +if ($err == Errno::ENOTSUP()) { + warn "$0: skipping test for btrfs UUID change feature is not available\n"; +}
You need to care in case $err is non-zero, that is a real error. Thanks, -- Pino Toscano