btrfs-progs: return the fsid from make_btrfs()

The function make_btrfs() has as argument the fsid of the filesystem.
If this fsid is empty or null make_btrfs() generates a new fsid. However
If the buffer is valid (but the string is empty) the generated fsid is
copied back to the caller.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
master
Goffredo Baroncelli 2014-12-17 21:14:09 +01:00 committed by David Sterba
parent b96345c7ff
commit f8a0b85e38
2 changed files with 10 additions and 4 deletions

7
mkfs.c
View File

@ -1142,7 +1142,7 @@ int main(int ac, char **av)
int dev_cnt = 0;
int saved_optind;
char estr[100];
char *fs_uuid = NULL;
char fs_uuid[BTRFS_UUID_UNPARSED_SIZE] = { 0 };
u64 features = BTRFS_MKFS_DEFAULT_FEATURES;
while(1) {
@ -1235,7 +1235,8 @@ int main(int ac, char **av)
source_dir_set = 1;
break;
case 'U':
fs_uuid = optarg;
strncpy(fs_uuid, optarg,
BTRFS_UUID_UNPARSED_SIZE - 1);
break;
case 'K':
discard = 0;
@ -1261,7 +1262,7 @@ int main(int ac, char **av)
exit(1);
}
if (fs_uuid) {
if (*fs_uuid) {
uuid_t dummy_uuid;
if (uuid_parse(fs_uuid, dummy_uuid) != 0) {

View File

@ -169,6 +169,9 @@ int test_uuid_unique(char *fs_uuid)
return unique;
}
/*
* @fs_uuid - if NULL, generates a UUID, returns back the new filesystem UUID
*/
int make_btrfs(int fd, const char *device, const char *label, char *fs_uuid,
u64 blocks[7], u64 num_bytes, u32 nodesize,
u32 sectorsize, u32 stripesize, u64 features)
@ -201,7 +204,7 @@ int make_btrfs(int fd, const char *device, const char *label, char *fs_uuid,
memset(&super, 0, sizeof(super));
num_bytes = (num_bytes / sectorsize) * sectorsize;
if (fs_uuid) {
if (fs_uuid && *fs_uuid) {
if (uuid_parse(fs_uuid, super.fsid) != 0) {
fprintf(stderr, "could not parse UUID: %s\n", fs_uuid);
ret = -EINVAL;
@ -214,6 +217,8 @@ int make_btrfs(int fd, const char *device, const char *label, char *fs_uuid,
}
} else {
uuid_generate(super.fsid);
if (fs_uuid)
uuid_unparse(super.fsid, fs_uuid);
}
uuid_generate(super.dev_item.uuid);
uuid_generate(chunk_tree_uuid);