diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 1b85cf503aeca4649e12a432c2ec7538af2fddf5..ba7042e2390b935df953cf873651683ba9d5987d 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -9469,6 +9469,10 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, memcpy(&key, &block_group->key, sizeof(key)); lock_chunks(root); + if (!list_empty(&em->list)) { + /* We're in the transaction->pending_chunks list. */ + free_extent_map(em); + } spin_lock(&block_group->lock); block_group->removed = 1; /* diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 588f37e0a56404c6e1a98a0eb35a6620e7ac32fa..ff2b351149721775bc3e6f3ea69daea29a782866 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4501,6 +4501,8 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans, free_extent_map(em); /* One for the tree reference */ free_extent_map(em); + /* One for the pending_chunks list reference */ + free_extent_map(em); error: kfree(devices_info); return ret;