• Josef Bacik's avatar
    btrfs: handle csum lookup errors properly on reads · 1784b7d5
    Josef Bacik authored
    Currently any error we get while trying to lookup csums during reads
    shows up as a missing csum, and then on the read completion side we
    print an error saying there was a csum mismatch and we increase the
    device corruption count.
    
    However we could have gotten an EIO from the lookup.  We could also be
    inside of a memory constrained container and gotten a ENOMEM while
    trying to do the read.  In either case we don't want to make this look
    like a file system corruption problem, we want to make it look like the
    actual error it is.  Capture any negative value, convert it to the
    appropriate blk_status_t, free the csum array if we have one and bail.
    
    Note: a possible improvement would be to make the relocation code look
    up the owning inode and see if it's marked as NODATASUM and set
    EXTENT_NODATASUM there, that way if there's corruption and there isn't a
    checksum when we want it we can fail here rather than later.
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    1784b7d5
file-item.c 36.4 KB