Btrfs: prevent list corruption during free space cache processing
authorChris Mason <clm@fb.com>
Fri, 24 Apr 2015 18:00:00 +0000 (11:00 -0700)
committerChris Mason <clm@fb.com>
Fri, 24 Apr 2015 18:52:25 +0000 (11:52 -0700)
commita3bdccc4e683f0ac69230707ed3fa20e7cf73a79
tree7cec1e92ccfa9fc236190810acb55f025e480d9d
parent85db36cfb3de1422aeafb4e2ce83396333b744bb
Btrfs: prevent list corruption during free space cache processing

__btrfs_write_out_cache is holding the ctl->tree_lock while it prepares
a list of bitmaps to record in the free space cache.  It was dropping
the lock while it worked on other components, which made a window for
free_bitmap() to free the bitmap struct without removing it from the
list.

This changes things to hold the lock the whole time, and also makes sure
we hold the lock during enospc cleanup.

Reported-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/free-space-cache.c