@@ -1332,11 +1332,6 @@ int main(int ac, char **av)
break;
case 'b':
block_count = parse_size(optarg);
- if (block_count <= 1024*1024*1024) {
- printf("SMALL VOLUME: forcing mixed "
- "metadata/data groups\n");
- mixed = 1;
- }
zero_end = 0;
break;
case 'V':
@@ -1388,6 +1383,18 @@ int main(int ac, char **av)
mixed = 1;
}
+ if (source_dir_set) {
+ source_dir_size = size_sourcedir(source_dir, sectorsize,
+ &num_of_meta_chunks, &size_of_data);
+ if (block_count < source_dir_size)
+ block_count = source_dir_size;
+ }
+
+ if (block_count && block_count < 1024 * 1024 * 1024 && !mixed) {
+ printf("SMALL VOLUME: forcing mixed metadata/data groups\n");
+ mixed = 1;
+ }
+
/*
* Set default profiles according to number of added devices.
* For mixed groups defaults are single/single.
@@ -1475,10 +1482,6 @@ int main(int ac, char **av)
}
first_file = file;
- source_dir_size = size_sourcedir(source_dir, sectorsize,
- &num_of_meta_chunks, &size_of_data);
- if(block_count < source_dir_size)
- block_count = source_dir_size;
ret = zero_output_file(fd, block_count, sectorsize);
if (ret) {
fprintf(stderr, "unable to zero the output file\n");
mkfs.btrfs did not force mixed data/metadata groups if the size of rootdir given by -r option is small. # mkdir -p /tmp/mydir # echo "aaa" > /tmp/mydir/myfile # mkfs.btrfs -f -r /tmp/mydir /dev/sdb1 ... fs created label (null) on /dev/sdb1 nodesize 16384 leafsize 16384 sectorsize 4096 size 28.00MiB ... leafsize and sectorsize are different means it is not using mixed groups. after this patch: # mkfs.btrfs -f -r /tmp/mydir /dev/sdb1 ... Turning ON incompat feature 'mixed-bg': mixed data and metadata block groups ... fs created label (null) on /dev/sdb1 nodesize 4096 leafsize 4096 sectorsize 4096 size 28.00MiB ... Also the size check in option -b is inconsistent with other similar size checks in utils.c. Make it consistent by removing '='. Signed-off-by: Guangyu Sun <guangyu.sun@oracle.com> --- mkfs.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)