btrfs-progs: check: introduce traversal function for fsck
[platform/upstream/btrfs-progs.git] / mkfs.c
diff --git a/mkfs.c b/mkfs.c
index 781a4b1..f30f057 100644 (file)
--- a/mkfs.c
+++ b/mkfs.c
@@ -88,7 +88,7 @@ static int create_metadata_block_groups(struct btrfs_root *root, int mixed,
                                        BTRFS_BLOCK_GROUP_DATA);
                if (ret == -ENOSPC) {
                        fprintf(stderr,
-                               "no space to alloc data/metadata chunk\n");
+                               "no space to allocate data/metadata chunk\n");
                        goto err;
                }
                BUG_ON(ret);
@@ -104,7 +104,7 @@ static int create_metadata_block_groups(struct btrfs_root *root, int mixed,
                                        &chunk_start, &chunk_size,
                                        BTRFS_BLOCK_GROUP_METADATA);
                if (ret == -ENOSPC) {
-                       fprintf(stderr, "no space to alloc metadata chunk\n");
+                       fprintf(stderr, "no space to allocate metadata chunk\n");
                        goto err;
                }
                BUG_ON(ret);
@@ -136,7 +136,7 @@ static int create_data_block_groups(struct btrfs_trans_handle *trans,
                                        &chunk_start, &chunk_size,
                                        BTRFS_BLOCK_GROUP_DATA);
                if (ret == -ENOSPC) {
-                       fprintf(stderr, "no space to alloc data chunk\n");
+                       fprintf(stderr, "no space to allocate data chunk\n");
                        goto err;
                }
                BUG_ON(ret);
@@ -340,7 +340,7 @@ static void print_version(void)
 
 static u64 parse_profile(char *s)
 {
-       if (strcmp(s, "raid0") == 0) {
+       if (strcasecmp(s, "raid0") == 0) {
                return BTRFS_BLOCK_GROUP_RAID0;
        } else if (strcasecmp(s, "raid1") == 0) {
                return BTRFS_BLOCK_GROUP_RAID1;
@@ -971,7 +971,7 @@ static int create_chunks(struct btrfs_trans_handle *trans,
                size_of_data = minimum_data_chunk_size;
 
        ret = btrfs_alloc_data_chunk(trans, root->fs_info->extent_root,
-                                    &chunk_start, size_of_data, data_type);
+                                    &chunk_start, size_of_data, data_type, 0);
        BUG_ON(ret);
        ret = btrfs_make_block_group(trans, root->fs_info->extent_root, 0,
                                     data_type, BTRFS_FIRST_CHUNK_TREE_OBJECTID,
@@ -1205,7 +1205,7 @@ static int is_temp_block_group(struct extent_buffer *node,
         * 1) Empty chunk
         * Temp chunk is always empty.
         *
-        * 2) profile dismatch with mkfs profile.
+        * 2) profile mismatch with mkfs profile.
         * Temp chunk is always in SINGLE
         *
         * 3) Size differs with mkfs_alloc
@@ -1318,10 +1318,27 @@ static int cleanup_temp_chunks(struct btrfs_fs_info *fs_info,
                if (is_temp_block_group(path->nodes[0], bgi,
                                        data_profile, meta_profile,
                                        sys_profile)) {
+                       u64 flags = btrfs_disk_block_group_flags(path->nodes[0],
+                                                            bgi);
+
                        ret = btrfs_free_block_group(trans, fs_info,
                                        found_key.objectid, found_key.offset);
                        if (ret < 0)
                                goto out;
+
+                       if ((flags & BTRFS_BLOCK_GROUP_TYPE_MASK) ==
+                           BTRFS_BLOCK_GROUP_DATA)
+                               alloc->data -= found_key.offset;
+                       else if ((flags & BTRFS_BLOCK_GROUP_TYPE_MASK) ==
+                                BTRFS_BLOCK_GROUP_METADATA)
+                               alloc->metadata -= found_key.offset;
+                       else if ((flags & BTRFS_BLOCK_GROUP_TYPE_MASK) ==
+                                BTRFS_BLOCK_GROUP_SYSTEM)
+                               alloc->system -= found_key.offset;
+                       else if ((flags & BTRFS_BLOCK_GROUP_TYPE_MASK) ==
+                                (BTRFS_BLOCK_GROUP_METADATA |
+                                 BTRFS_BLOCK_GROUP_DATA))
+                               alloc->mixed -= found_key.offset;
                }
                btrfs_release_path(path);
                key.objectid = found_key.objectid + found_key.offset;
@@ -1482,6 +1499,7 @@ int main(int argc, char **argv)
        }
 
        sectorsize = max(sectorsize, (u32)sysconf(_SC_PAGESIZE));
+       stripesize = sectorsize;
        saved_optind = optind;
        dev_cnt = argc - optind;
        if (dev_cnt == 0)
@@ -1618,8 +1636,11 @@ int main(int argc, char **argv)
                                strerror(errno));
                        exit(1);
                }
-               ret = btrfs_prepare_device(fd, file, zero_end, &dev_block_count,
-                                          block_count, discard);
+               ret = btrfs_prepare_device(fd, file, &dev_block_count,
+                               block_count,
+                               (zero_end ? PREP_DEVICE_ZERO_END : 0) |
+                               (discard ? PREP_DEVICE_DISCARD : 0) |
+                               (verbose ? PREP_DEVICE_VERBOSE : 0));
                if (ret) {
                        close(fd);
                        exit(1);
@@ -1663,7 +1684,7 @@ int main(int argc, char **argv)
        if (group_profile_max_safe_loss(metadata_profile) <
                group_profile_max_safe_loss(data_profile)){
                fprintf(stderr,
-                       "WARNING: metatdata has lower redundancy than data!\n\n");
+                       "WARNING: metadata has lower redundancy than data!\n\n");
        }
 
        mkfs_cfg.label = label;
@@ -1675,7 +1696,7 @@ int main(int argc, char **argv)
        mkfs_cfg.stripesize = stripesize;
        mkfs_cfg.features = features;
 
-       ret = make_btrfs(fd, &mkfs_cfg);
+       ret = make_btrfs(fd, &mkfs_cfg, NULL);
        if (ret) {
                fprintf(stderr, "error during mkfs: %s\n", strerror(-ret));
                exit(1);
@@ -1749,8 +1770,11 @@ int main(int argc, char **argv)
                        close(fd);
                        continue;
                }
-               ret = btrfs_prepare_device(fd, file, zero_end, &dev_block_count,
-                                          block_count, discard);
+               ret = btrfs_prepare_device(fd, file, &dev_block_count,
+                               block_count,
+                               (verbose ? PREP_DEVICE_VERBOSE : 0) |
+                               (zero_end ? PREP_DEVICE_ZERO_END : 0) |
+                               (discard ? PREP_DEVICE_DISCARD : 0));
                if (ret) {
                        close(fd);
                        exit(1);