Btrfs: Endianess bug fix for v0.13 with kernels
authorMiguel <miguel.filipe@gmail.com>
Fri, 11 Apr 2008 19:45:51 +0000 (15:45 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:04:01 +0000 (11:04 -0400)
commita5eb62e345fc1818d0d8b6181463200a9e8dfe39
tree2e67b0628c8312d941f52edadc6c49bd8ac4c914
parent587f77043a1c86e2a7900ff2ce86bef3c1f4e075
Btrfs: Endianess bug fix for v0.13 with kernels

Fix for a endianess BUG when using btrfs v0.13 with kernels older than 2.6.23

Problem:

Has of v0.13, btrfs-progs is using crc32c.c equivalent to the one found on
linux-2.6.23/lib/libcrc32c.c Since crc32c_le() changed in linux-2.6.23, when
running btrfs v0.13 with older kernels we have a missmatch between the versions
of crc32c_le() from btrfs-progs and libcrc32c in the kernel.  This missmatch
causes a bug when using btrfs on big endian machines.

Solution:
btrfs_crc32c() macro that when compiling for kernels older than 2.6.23, does
endianess conversion to parameters and return value of crc32c().
This endianess conversion nullifies the differences in implementation
of crc32c_le().
If kernel 2.6.23 or better, it calls crc32c().

Signed-off-by: Miguel Sousa Filipe <miguel.filipe@gmail.com>
---

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/crc32c.h [new file with mode: 0644]
fs/btrfs/disk-io.c
fs/btrfs/extent-tree.c