btrfs: do not consider send context as valid when trying to flush qgroups
authorFilipe Manana <fdmanana@suse.com>
Thu, 22 Apr 2021 11:09:21 +0000 (12:09 +0100)
committerDavid Sterba <dsterba@suse.com>
Wed, 28 Apr 2021 18:09:42 +0000 (20:09 +0200)
commitffb7c2e923cb3232454a513dcb5636e73091aa88
tree490fc01140619e10896a89755c892a900bbb331b
parentadbd914dcde0b03bfc08ffe40b81f31b0457833f
btrfs: do not consider send context as valid when trying to flush qgroups

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: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/qgroup.c