forked from Mirrors/btrfs-progs
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
parent
b96345c7ff
commit
f8a0b85e38
7
mkfs.c
7
mkfs.c
|
@ -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) {
|
||||
|
|
7
utils.c
7
utils.c
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue