Btrfs: fix free space tree bitmaps on big-endian systems
authorOmar Sandoval <osandov@fb.com>
Fri, 23 Sep 2016 00:24:20 +0000 (17:24 -0700)
committerDavid Sterba <dsterba@suse.com>
Mon, 3 Oct 2016 16:52:14 +0000 (18:52 +0200)
commit2fe1d55134fce05c17ea118a2e37a4af771887bc
tree1a62e8f01bf5046337072e950c5d329c30611e6e
parent08895a8b6b06ed2323cd97a36ee40a116b3db8ed
Btrfs: fix free space tree bitmaps on big-endian systems

In convert_free_space_to_{bitmaps,extents}(), we buffer the free space
bitmaps in memory and copy them directly to/from the extent buffers with
{read,write}_extent_buffer(). The extent buffer bitmap helpers use byte
granularity, which is equivalent to a little-endian bitmap. This means
that on big-endian systems, the in-memory bitmaps will be written to
disk byte-swapped. To fix this, use byte-granularity for the bitmaps in
memory.

Fixes: a5ed91828518 ("Btrfs: implement the free space B-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/extent_io.c
fs/btrfs/extent_io.h
fs/btrfs/free-space-tree.c