]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit - fs/btrfs/ctree.h
Btrfs: catch invalid free space trees
authorOmar Sandoval <osandov@fb.com>
Fri, 23 Sep 2016 00:24:22 +0000 (17:24 -0700)
committerDavid Sterba <dsterba@suse.com>
Mon, 3 Oct 2016 16:52:14 +0000 (18:52 +0200)
commit6675df311db87aa2107a04ef97e19420953cbace
tree0c1afd7c2acb7bcb767c949984203c6f96ac4184
parentf8d468a15c22b954b379aa0c74914d5068448fb1
Btrfs: catch invalid free space trees

There are two separate issues that can lead to corrupted free space
trees.

1. The free space tree bitmaps had an endianness issue on big-endian
   systems which is fixed by an earlier patch in this series.
2. btrfs-progs before v4.7.3 modified filesystems without updating the
   free space tree.

To catch both of these issues at once, we need to force the free space
tree to be rebuilt. To do so, add a FREE_SPACE_TREE_VALID compat_ro bit.
If the bit isn't set, we know that it was either produced by a broken
big-endian kernel or may have been corrupted by btrfs-progs.

This also provides us with a way to add rudimentary read-write support
for the free space tree to btrfs-progs: it can just clear this bit and
have the kernel rebuild the free space tree.

Cc: stable@vger.kernel.org # 4.5+
Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
Tested-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/free-space-tree.c
include/uapi/linux/btrfs.h