Skip to content

Commit

Permalink
Btrfs: fix sleep with spinlock held during unmount
Browse files Browse the repository at this point in the history
The code to free block groups needs to drop the space info spin lock
before calling btrfs_remove_free_space_cache (which can schedule).

This is safe because at unmount time, nobody else is going to play
with the block groups.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
  • Loading branch information
Chris Mason committed Sep 25, 2008
1 parent 2b1f55b commit 4434c33
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions fs/btrfs/extent-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -3157,9 +3157,13 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
block_group = rb_entry(n, struct btrfs_block_group_cache,
cache_node);

spin_unlock(&info->block_group_cache_lock);
btrfs_remove_free_space_cache(block_group);
spin_lock(&info->block_group_cache_lock);

rb_erase(&block_group->cache_node,
&info->block_group_cache_tree);

spin_lock(&block_group->space_info->lock);
list_del(&block_group->list);
spin_unlock(&block_group->space_info->lock);
Expand Down

0 comments on commit 4434c33

Please sign in to comment.