Skip to content
  • Liu Bo's avatar
    Btrfs: raid56: fix race between merge_bio and rbio_orig_end_io · 7583d8d0
    Liu Bo authored
    
    
    Before rbio_orig_end_io() goes to free rbio, rbio may get merged with
    more bios from other rbios and rbio->bio_list becomes non-empty,
    in that case, these newly merged bios don't end properly.
    
    Once unlock_stripe() is done, rbio->bio_list will not be updated any
    more and we can call bio_endio() on all queued bios.
    
    It should only happen in error-out cases, the normal path of recover
    and full stripe write have already set RBIO_RMW_LOCKED_BIT to disable
    merge before doing IO, so rbio_orig_end_io() called by them doesn't
    have the above issue.
    
    Reported-by: default avatarJérôme Carretero <cJ-ko@zougloub.eu>
    Signed-off-by: default avatarLiu Bo <bo.li.liu@oracle.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    7583d8d0