]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit - fs/btrfs/extent-tree.c
Btrfs: bail out if block group has different mixed flag
authorLiu Bo <bo.li.liu@oracle.com>
Fri, 26 Aug 2016 01:08:27 +0000 (18:08 -0700)
committerDavid Sterba <dsterba@suse.com>
Mon, 26 Sep 2016 15:59:49 +0000 (17:59 +0200)
commit49303381f19ab16a371a061b67e783d3f570d56e
treec70a9224882d29c4a6d6a68a53343517c2bc0e0e
parent2571e739677f1e4c0c63f5ed49adcc0857923625
Btrfs: bail out if block group has different mixed flag

Currently we allow inconsistence about mixed flag
 (BTRFS_BLOCK_GROUP_METADATA | BTRFS_BLOCK_GROUP_DATA).

We'd get ENOSPC if block group has mixed flag and btrfs doesn't.
If that happens, we have one space_info with mixed flag and another
space_info only with BTRFS_BLOCK_GROUP_METADATA, and
global_block_rsv.space_info points to the latter one, but all bytes
from block_group contributes to the mixed space_info, thus all the
allocation will fail with ENOSPC.

This adds a check for the above case.

Reported-by: Vegard Nossum <vegard.nossum@oracle.com>
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
[ updated message ]
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent-tree.c