btrfs-progs: error if device for mkfs is too small
authorHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Thu, 5 Sep 2013 06:53:34 +0000 (15:53 +0900)
committerChris Mason <chris.mason@fusionio.com>
Wed, 16 Oct 2013 12:20:42 +0000 (08:20 -0400)
Eric pointed out that mkfs abort if specified volume is too small:

  # truncate --size=2m testfile
  # ./mkfs.btrfs testfile
   :
  SMALL VOLUME: forcing mixed metadata/data groups
  mkfs.btrfs: volumes.c:852: btrfs_alloc_chunk: Assertion `!(ret)' failed.
  Aborted (core dumped)

As the first step to fix problems around there, let mkfs to report
error if the size of target volume is less than the size of the first
system block group, BTRFS_MKFS_SYSTEM_GROUP_SIZE (= 4MB).

Reported-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
mkfs.c

diff --git a/mkfs.c b/mkfs.c
index 6abd3f89fd957294cd4a37ff23160e6721738090..b442fc0a17fced2f6a118dd3ed512f8abe6b5b24 100644 (file)
--- a/mkfs.c
+++ b/mkfs.c
@@ -1513,6 +1513,11 @@ int main(int ac, char **av)
                dev_block_count = block_count;
        }
 
+       /* To create the first block group and chunk 0 in make_btrfs */
+       if (dev_block_count < BTRFS_MKFS_SYSTEM_GROUP_SIZE) {
+               fprintf(stderr, "device is too small to make filesystem\n");
+               exit(1);
+       }
 
        blocks[0] = BTRFS_SUPER_INFO_OFFSET;
        for (i = 1; i < 7; i++) {