• Filipe Manana's avatar
    Btrfs: fix unprotected deletion from pending_chunks list · 8dbcd10f
    Filipe Manana authored
    On block group remove if the corresponding extent map was on the
    transaction->pending_chunks list, we were deleting the extent map
    from that list, through remove_extent_mapping(), without any
    synchronization with chunk allocation (which iterates that list
    and adds new elements to it). Fix this by ensure that this is done
    while the chunk mutex is held, since that's the mutex that protects
    the list in the chunk allocation code path.
    
    This applies on top (depends on) of my previous patch titled:
    "Btrfs: fix race between fs trimming and block group remove/allocation"
    
    But the issue in fact was already present before that change, it only
    became easier to hit after Josef's 3.18 patch that added automatic
    removal of empty block groups.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    8dbcd10f
extent-tree.c 261 KB