btrfs-progs: free-space-cache: Enhance free space cache free space check
authorQu Wenruo <wqu@suse.com>
Thu, 8 Mar 2018 07:02:31 +0000 (15:02 +0800)
committerDavid Sterba <dsterba@suse.com>
Fri, 30 Mar 2018 20:15:53 +0000 (22:15 +0200)
commit4c7094e046dc7875af2e7f65eb80b256b6232fd7
tree3d369ec5be3b1135965dbbfe4ecb3c53d05df0b1
parentfd5767a574958624828149687e76a5f0276f1dc8
btrfs-progs: free-space-cache: Enhance free space cache free space check

When we found free space difference between free space cache and block
group item, we just discard this free space cache.

Normally such difference is caused by btrfs_reserve_extent() called by
delalloc which is out of a transaction.
And since all btrfs_release_extent() is called with a transaction, under
heavy race free space cache can have less free space than block group
item.

Normally kernel will detect such difference and just discard that cache.

However we must be more careful if free space cache has more free space
cache, and if that happens, paried with above race one invalid free
space cache can be loaded into kernel.

So if we find any free space cache who has more free space then block
group item, we report it as an error other than ignoring it.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
check/main.c
free-space-cache.c