#include "kerncompat.h"
#include "common-defs.h"
+#define BTRFS_MKFS_SYSTEM_GROUP_SIZE SZ_4M
+#define BTRFS_MKFS_SMALL_VOLUME_SIZE SZ_1G
+
+/*
+ * Tree root blocks created during mkfs
+ */
+enum btrfs_mkfs_block {
+ MKFS_SUPER_BLOCK = 0,
+ MKFS_ROOT_TREE,
+ MKFS_EXTENT_TREE,
+ MKFS_CHUNK_TREE,
+ MKFS_DEV_TREE,
+ MKFS_FS_TREE,
+ MKFS_CSUM_TREE,
+ MKFS_BLOCK_COUNT
+};
+
struct btrfs_mkfs_config {
- char *label;
- char fs_uuid[BTRFS_UUID_UNPARSED_SIZE];
- char chunk_uuid[BTRFS_UUID_UNPARSED_SIZE];
- u64 blocks[8];
- u64 num_bytes;
+ /* Label of the new filesystem */
+ const char *label;
+ /* Blck sizes */
u32 nodesize;
u32 sectorsize;
u32 stripesize;
+ /* Bitfield of incompat features, BTRFS_FEATURE_INCOMPAT_* */
u64 features;
+ /* Size of the filesystem in bytes */
+ u64 num_bytes;
+
+ /* Output fields, set during creation */
+
+ /* Logical addresses of superblock [0] and other tree roots */
+ u64 blocks[MKFS_BLOCK_COUNT + 1];
+ char fs_uuid[BTRFS_UUID_UNPARSED_SIZE];
+ char chunk_uuid[BTRFS_UUID_UNPARSED_SIZE];
- /* Super bytenr after make_btrfs */
+ /* Superblock offset after make_btrfs */
u64 super_bytenr;
};
int make_btrfs(int fd, struct btrfs_mkfs_config *cfg);
+u64 btrfs_min_dev_size(u32 nodesize, int mixed, u64 meta_profile,
+ u64 data_profile);
+int test_minimum_size(const char *file, u64 min_dev_size);
+int is_vol_small(const char *file);
+int test_num_disk_vs_raid(u64 metadata_profile, u64 data_profile,
+ u64 dev_cnt, int mixed, int ssd);
+int test_status_for_mkfs(const char *file, bool force_overwrite);
+int test_dev_for_mkfs(const char *file, int force_overwrite);
#endif