• Josef Bacik's avatar
    Btrfs: relocate csums properly with prealloc extents · f9bbe6ea
    Josef Bacik authored
    commit 4577b014 upstream.
    
    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,
    Reported-by: default avatarChris Murphy <lists@colorremedies.com>
    Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
    Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f9bbe6ea
relocation.c 109 KB