]> git.baikalelectronics.ru Git - kernel.git/commit
Btrfs: relocate csums properly with prealloc extents
authorJosef Bacik <jbacik@fusionio.com>
Fri, 27 Sep 2013 13:33:09 +0000 (09:33 -0400)
committerChris Mason <chris.mason@fusionio.com>
Tue, 12 Nov 2013 02:53:22 +0000 (21:53 -0500)
commita63b7d803e4352cfc64d7d295d2b8319995600c2
tree2f27f5b954b1497b9ca0e1c73bc2b3092159bc74
parentc5d07170e8bc6be35d58093227f9e613c145e198
Btrfs: relocate csums properly with prealloc extents

A user reported a problem where they were getting csum errors when running a
balance and running systemd's journal.  This is because systemd is awesome and
fallocate()'s its log space and writes into it.  Unfortunately we assume that
when we read in all the csums for an extent that they are sequential starting at
the bytenr we care about.  This obviously isn't the case for prealloc extents,
where we could have written to the middle of the prealloc extent only, which
means the csum would be for the bytenr in the middle of our range and not the
front of our range.  Fix this by offsetting the new bytenr we are logging to
based on the original bytenr the csum was for.  With this patch I no longer see
the csum errors I was seeing.  Thanks,

Cc: stable@vger.kernel.org
Reported-by: Chris Murphy <lists@colorremedies.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
fs/btrfs/relocation.c