• Qu Wenruo's avatar
    btrfs: merge btrfs_orig_bbio_end_io() into btrfs_bio_end_io() · 9ca0e58c
    Qu Wenruo authored
    There are only two differences between the two functions:
    
    - btrfs_orig_bbio_end_io() does extra error propagation
      This is mostly to allow tolerance for write errors.
    
    - btrfs_orig_bbio_end_io() does extra pending_ios check
      This check can handle both the original bio, or the cloned one.
      (All accounting happens in the original one).
    
    This makes btrfs_orig_bbio_end_io() a much safer call.
    In fact we already had a double freeing error due to usage of
    btrfs_bio_end_io() in the error path of btrfs_submit_chunk().
    
    So just move the whole content of btrfs_orig_bbio_end_io() into
    btrfs_bio_end_io().
    
    For normal paths this brings no change, because they are already calling
    btrfs_orig_bbio_end_io() in the first place.
    
    For error paths (not only inside bio.c but also external callers), this
    change will introduce extra checks, especially for external callers, as
    they will error out without submitting the btrfs bio.
    
    But considering it's already in the error path, such slower but much
    safer checks are still an overall win.
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    9ca0e58c
bio.c 25.7 KB