]> git.hungrycats.org Git - linux/commit
Btrfs: fix unprotected deletion from pending_chunks list
authorFilipe Manana <fdmanana@suse.com>
Tue, 2 Dec 2014 18:07:49 +0000 (18:07 +0000)
committerZygo Blaxell <zblaxell@serenity.furryterror.org>
Fri, 23 Jan 2015 13:21:47 +0000 (08:21 -0500)
commitbf55e3b862b8ba01f32a07e2a875661efd3bff42
treef7c8e940a752e80386a3f861e8e1c8f7a0fe4b10
parentc105b7acdb7bf09724d35af9a89d364956a3f9c5
Btrfs: fix unprotected deletion from pending_chunks list

On block group remove if the corresponding extent map was on the
transaction->pending_chunks list, we were deleting the extent map
from that list, through remove_extent_mapping(), without any
synchronization with chunk allocation (which iterates that list
and adds new elements to it). Fix this by ensure that this is done
while the chunk mutex is held, since that's the mutex that protects
the list in the chunk allocation code path.

This applies on top (depends on) of my previous patch titled:
"Btrfs: fix race between fs trimming and block group remove/allocation"

But the issue in fact was already present before that change, it only
became easier to hit after Josef's 3.18 patch that added automatic
removal of empty block groups.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
(cherry picked from commit 8dbcd10f6978ca3ccee2f43288d16b7b9da2fb2b)
fs/btrfs/extent-tree.c