diff options
author | Chandan Rajendra <chandan@linux.vnet.ibm.com> | 2015-10-14 23:10:38 +0530 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2015-11-02 09:35:08 +0100 |
commit | a73eb8b993dc644f6b10fc18b9036f89e00588e2 (patch) | |
tree | 9c429fbd0f450f084ba7bbb5b7251b9234fbf649 /mkfs.c | |
parent | ca582727e8393aec3f585ab77b66279970af18ed (diff) |
Btrfs-progs: Prevent creation of filesystem with 'mixed bgs' and having differing sectorsize and nodesize.
mkfs.btrfs allows creation of Btrfs filesystem instances with mixed block
group feature enabled and having a sectorsize different from nodesize.
For e.g:
[root@localhost btrfs-progs]# mkfs.btrfs -f -M -s 4096 -n 16384 /dev/loop0
Forcing mixed metadata/data groups
btrfs-progs v3.19-rc2-404-gbbbd18e-dirty
See http://btrfs.wiki.kernel.org for more information.
Performing full device TRIM (4.00GiB) ...
Label: (null)
UUID: c82b5720-6d88-4fa1-ac05-d0d4cb797fd5
Node size: 16384
Sector size: 4096
Filesystem size: 4.00GiB
Block group profiles:
Data+Metadata: single 8.00MiB
System: single 4.00MiB
SSD detected: no
Incompat features: mixed-bg, extref, skinny-metadata
Number of devices: 1
Devices:
ID SIZE PATH
1 4.00GiB /dev/loop6
This commit fixes the issue by setting BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS
feature bit before checking the validity of nodesize that was specified on the
command line.
Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'mkfs.c')
-rw-r--r-- | mkfs.c | 25 |
1 files changed, 13 insertions, 12 deletions
@@ -1540,6 +1540,19 @@ int main(int ac, char **av) if (!nodesize_forced) nodesize = best_nodesize; } + + /* + * FS features that can be set by other means than -O + * just set the bit here + */ + if (mixed) + features |= BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS; + + if ((data_profile | metadata_profile) & + (BTRFS_BLOCK_GROUP_RAID5 | BTRFS_BLOCK_GROUP_RAID6)) { + features |= BTRFS_FEATURE_INCOMPAT_RAID56; + } + if (btrfs_check_nodesize(nodesize, sectorsize, features)) exit(1); @@ -1647,18 +1660,6 @@ int main(int ac, char **av) "WARNING: metatdata has lower redundancy than data!\n\n"); } - /* - * FS features that can be set by other means than -O - * just set the bit here - */ - if (mixed) - features |= BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS; - - if ((data_profile | metadata_profile) & - (BTRFS_BLOCK_GROUP_RAID5 | BTRFS_BLOCK_GROUP_RAID6)) { - features |= BTRFS_FEATURE_INCOMPAT_RAID56; - } - mkfs_cfg.label = label; mkfs_cfg.fs_uuid = fs_uuid; memcpy(mkfs_cfg.blocks, blocks, sizeof(blocks)); |