summaryrefslogtreecommitdiff
path: root/mkfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'mkfs.c')
-rw-r--r--mkfs.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/mkfs.c b/mkfs.c
index bf8a831d..cd0af9ef 100644
--- a/mkfs.c
+++ b/mkfs.c
@@ -46,6 +46,8 @@
static u64 index_cnt = 2;
+#define DEFAULT_MKFS_LEAF_SIZE 16384
+
struct directory_name_entry {
char *dir_name;
char *path;
@@ -1222,7 +1224,7 @@ int main(int ac, char **av)
u64 alloc_start = 0;
u64 metadata_profile = 0;
u64 data_profile = 0;
- u32 leafsize = sysconf(_SC_PAGESIZE);
+ u32 leafsize = max_t(u32, sysconf(_SC_PAGESIZE), DEFAULT_MKFS_LEAF_SIZE);
u32 sectorsize = 4096;
u32 nodesize = leafsize;
u32 stripesize = 4096;
@@ -1232,6 +1234,7 @@ int main(int ac, char **av)
int ret;
int i;
int mixed = 0;
+ int leaf_forced = 0;
int data_profile_opt = 0;
int metadata_profile_opt = 0;
int discard = 1;
@@ -1269,6 +1272,7 @@ int main(int ac, char **av)
case 'n':
nodesize = parse_size(optarg);
leafsize = parse_size(optarg);
+ leaf_forced = 1;
break;
case 'L':
label = parse_label(optarg);
@@ -1386,8 +1390,21 @@ int main(int ac, char **av)
BTRFS_BLOCK_GROUP_RAID0 : 0; /* raid0 or single */
}
} else {
+ u32 best_leafsize = max_t(u32, sysconf(_SC_PAGESIZE), sectorsize);
metadata_profile = 0;
data_profile = 0;
+
+ if (!leaf_forced) {
+ leafsize = best_leafsize;
+ nodesize = best_leafsize;
+ if (check_leaf_or_node_size(leafsize, sectorsize))
+ exit(1);
+ }
+ if (leafsize != sectorsize) {
+ fprintf(stderr, "Error: mixed metadata/data block groups "
+ "require metadata blocksizes equal to the sectorsize\n");
+ exit(1);
+ }
}
ret = test_num_disk_vs_raid(metadata_profile, data_profile,