• Josef Bacik's avatar
    btrfs: do not double complete bio on errors during compressed reads · f9f15de8
    Josef Bacik authored
    I hit some weird panics while fixing up the error handling from
    btrfs_lookup_bio_sums().  Turns out the compression path will complete
    the bio we use if we set up any of the compression bios and then return
    an error, and then btrfs_submit_data_bio() will also call bio_endio() on
    the bio.
    
    Fix this by making btrfs_submit_compressed_read() responsible for
    calling bio_endio() on the bio if there are any errors.  Currently it
    was only doing it if we created the compression bios, otherwise it was
    depending on btrfs_submit_data_bio() to do the right thing.  This
    creates the above problem, so fix up btrfs_submit_compressed_read() to
    always call bio_endio() in case of an error, and then simply return from
    btrfs_submit_data_bio() if we had to call
    btrfs_submit_compressed_read().
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    f9f15de8
compression.c 50.3 KB