Commit 96192499 authored by Josef Bacik's avatar Josef Bacik Committed by Chris Mason

Btrfs: stop all workers after we free block groups

Stefan was hitting a panic in the async worker stuff because we had outstanding
read bios while we were stopping the worker threads.  You could reproduce this
easily if you mount -o nospace_cache and ran generic/273.  This is because the
caching thread stuff is still going and we were stopping all the worker threads.
We need to stop the workers after this work is done, and the free block groups
code will wait for all the caching threads to stop first so we don't run into
this problem.  With this patch we no longer panic.  Thanks,

Cc: stable@vger.kernel.org
Reported-by: default avatarStefan Behrens <sbehrens@giantdisaster.de>
Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
parent aaedb55b
...@@ -3637,12 +3637,12 @@ int close_ctree(struct btrfs_root *root) ...@@ -3637,12 +3637,12 @@ int close_ctree(struct btrfs_root *root)
percpu_counter_sum(&fs_info->delalloc_bytes)); percpu_counter_sum(&fs_info->delalloc_bytes));
} }
btrfs_stop_all_workers(fs_info);
del_fs_roots(fs_info); del_fs_roots(fs_info);
btrfs_free_block_groups(fs_info); btrfs_free_block_groups(fs_info);
btrfs_stop_all_workers(fs_info);
free_root_pointers(fs_info, 1); free_root_pointers(fs_info, 1);
iput(fs_info->btree_inode); iput(fs_info->btree_inode);
......
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