mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git
synced 2024-11-16 00:34:32 +08:00
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>
This commit is contained in:
parent
ca582727e8
commit
a73eb8b993
25
mkfs.c
25
mkfs.c
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user