• Filipe Manana's avatar
    btrfs: do not consider send context as valid when trying to flush qgroups · ffb7c2e9
    Filipe Manana authored
    At qgroup.c:try_flush_qgroup() we are asserting that current->journal_info
    is either NULL or has the value BTRFS_SEND_TRANS_STUB.
    
    However allowing for BTRFS_SEND_TRANS_STUB makes no sense because:
    
    1) It is misleading, because send operations are read-only and do not
       ever need to reserve qgroup space;
    
    2) We already assert that current->journal_info != BTRFS_SEND_TRANS_STUB
       at transaction.c:start_transaction();
    
    3) On a kernel without CONFIG_BTRFS_ASSERT=y set, it would result in
       a crash if try_flush_qgroup() is ever called in a send context, because
       at transaction.c:start_transaction we cast current->journal_info into
       a struct btrfs_trans_handle pointer and then dereference it.
    
    So just do allow a send context at try_flush_qgroup() and update the
    comment about it.
    Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    ffb7c2e9
qgroup.c 109 KB