Commit 0a31daa4 authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba

btrfs: add assertion for empty list of transactions at late stage of umount

Add an assertion to close_ctree(), after destroying all the work queues,
to verify we do not have any transaction still open or committing at that
at that point. If we have any, it means something is seriously wrong and
that can cause memory leaks and use-after-free problems. This is motivated
by the previous patches that fixed bugs where we ended up leaking an open
transaction after unmounting the filesystem.
Tested-by: default avatarFabian Vogt <fvogt@suse.com>
Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.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>
parent a0a1db70
...@@ -4181,6 +4181,9 @@ void __cold close_ctree(struct btrfs_fs_info *fs_info) ...@@ -4181,6 +4181,9 @@ void __cold close_ctree(struct btrfs_fs_info *fs_info)
invalidate_inode_pages2(fs_info->btree_inode->i_mapping); invalidate_inode_pages2(fs_info->btree_inode->i_mapping);
btrfs_stop_all_workers(fs_info); btrfs_stop_all_workers(fs_info);
/* We shouldn't have any transaction open at this point */
ASSERT(list_empty(&fs_info->trans_list));
clear_bit(BTRFS_FS_OPEN, &fs_info->flags); clear_bit(BTRFS_FS_OPEN, &fs_info->flags);
free_root_pointers(fs_info, true); free_root_pointers(fs_info, true);
btrfs_free_fs_roots(fs_info); btrfs_free_fs_roots(fs_info);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment