Btrfs-progs: Do not force mixed block group creation unless '-M' option is specified
authorChandan Rajendra <chandan@linux.vnet.ibm.com>
Wed, 14 Oct 2015 17:39:37 +0000 (23:09 +0530)
committerDavid Sterba <dsterba@suse.com>
Mon, 2 Nov 2015 08:35:04 +0000 (09:35 +0100)
commitc11e36a29e84b7dc142f4dad8d02902f4f7ae158
tree08877d380af1bfc58d3c4678a69c7fc3529e2f1e
parentcd12def348a1d55fdc1c680f3ed9c393f77ab407
Btrfs-progs: Do not force mixed block group creation unless '-M' option is specified

When creating small Btrfs filesystem instances (i.e. filesystem size <= 1GiB),
mkfs.btrfs fails if both sectorsize and nodesize are specified on the command
line and sectorsize != nodesize, since mixed block groups involves both data
and metadata blocks sharing the same block group. This is an incorrect behavior
when '-M' option isn't specified on the command line.

This commit makes optional the creation of mixed block groups i.e. Mixed block
groups are created only when -M option is specified on the command line.

Since we now allow small filesystem instances with sectorsize != nodesize to
be created, we can end up in the following situation,

[root@localhost ~]# mkfs.btrfs -f -n 65536 /dev/loop0
btrfs-progs v3.19-rc2-405-g976307c
See http://btrfs.wiki.kernel.org for more information.

Performing full device TRIM (512.00MiB) ...
Label:              (null)
UUID:               49fab72e-0c8b-466b-a3ca-d1bfe56475f0
Node size:          65536
Sector size:        4096
Filesystem size:    512.00MiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         DUP              40.00MiB
  System:           DUP              12.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1   512.00MiB  /dev/loop0
[root@localhost ~]# mount /dev/loop0 /mnt/
mount: mount /dev/loop0 on /mnt failed: No space left on device

The ENOSPC occurs during the creation of the UUID tree. This is because of
things like large metadata block size, DUP mode used for metadata and global
reservation consuming space. Also, large nodesize does not make sense on small
filesystems, hence this should not be an issue.

Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Documentation/mkfs.btrfs.asciidoc
cmds-device.c
cmds-replace.c
mkfs.c
utils.c
utils.h