• Christoph Hellwig's avatar
    btrfs: call btrfs_orig_bbio_end_io in btrfs_end_bio_work · 45c2f368
    Christoph Hellwig authored
    When I implemented the storage layer bio splitting, I was under the
    assumption that we'll never split metadata bios.  But Qu reminded me that
    this can actually happen with very old file systems with unaligned
    metadata chunks and RAID0.
    
    I still haven't seen such a case in practice, but we better handled this
    case, especially as it is fairly easily to do not calling the ->end_іo
    method directly in btrfs_end_io_work, and using the proper
    btrfs_orig_bbio_end_io helper instead.
    
    In addition to the old file system with unaligned metadata chunks case
    documented in the commit log, the combination of the new scrub code
    with Johannes pending raid-stripe-tree also triggers this case.  We
    spent some time debugging it and found that this patch solves
    the problem.
    
    Fixes: 103c1972 ("btrfs: split the bio submission path into a separate file")
    CC: stable@vger.kernel.org # 6.3+
    Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    Tested-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    45c2f368
bio.c 23.9 KB