• J
    Btrfs: relocate csums properly with prealloc extents · 4577b014
    Josef Bacik 提交于
    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: NChris Murphy <lists@colorremedies.com>
    Signed-off-by: NJosef Bacik <jbacik@fusionio.com>
    Signed-off-by: NChris Mason <chris.mason@fusionio.com>
    4577b014
relocation.c 108.8 KB