diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 3cd5286572d4..02bf2fbe3e84 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -5427,18 +5427,20 @@ static struct btrfs_trans_handle *evict_refill_and_join(struct btrfs_root *root, void btrfs_evict_inode(struct inode *inode) { + const bool in_send = (current->journal_info == BTRFS_SEND_TRANS_STUB); struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); struct btrfs_trans_handle *trans; struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_block_rsv *rsv; int ret; + if (in_send) + current->journal_info = NULL; + trace_btrfs_inode_evict(inode); - if (!root) { - clear_inode(inode); - return; - } + if (!root) + goto out; evict_inode_truncate_pages(inode); @@ -5518,7 +5520,11 @@ void btrfs_evict_inode(struct inode *inode) * to retry these periodically in the future. */ btrfs_remove_delayed_node(BTRFS_I(inode)); +out: clear_inode(inode); + if (in_send) + current->journal_info = BTRFS_SEND_TRANS_STUB; + } /*