dm: free table mempools if not used in __bind
[ Upstream commite8819e7f03] With request-based dm, the mempools don't need reloading when switching tables, but the unused table mempools are not freed until the active table is finally freed. Free them immediately if they are not needed. Fixes:29dec90a0f("dm: fix bio_set allocation") Reviewed-by: Damien Le Moal <dlemoal@kernel.org> Tested-by: Damien Le Moal <dlemoal@kernel.org> Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
679d40ca03
commit
06f41679d3
+4
-4
@@ -2235,10 +2235,10 @@ static struct dm_table *__bind(struct mapped_device *md, struct dm_table *t,
|
||||
* requests in the queue may refer to bio from the old bioset,
|
||||
* so you must walk through the queue to unprep.
|
||||
*/
|
||||
if (!md->mempools) {
|
||||
if (!md->mempools)
|
||||
md->mempools = t->mempools;
|
||||
t->mempools = NULL;
|
||||
}
|
||||
else
|
||||
dm_free_md_mempools(t->mempools);
|
||||
} else {
|
||||
/*
|
||||
* The md may already have mempools that need changing.
|
||||
@@ -2247,8 +2247,8 @@ static struct dm_table *__bind(struct mapped_device *md, struct dm_table *t,
|
||||
*/
|
||||
dm_free_md_mempools(md->mempools);
|
||||
md->mempools = t->mempools;
|
||||
t->mempools = NULL;
|
||||
}
|
||||
t->mempools = NULL;
|
||||
|
||||
old_map = rcu_dereference_protected(md->map, lockdep_is_held(&md->suspend_lock));
|
||||
rcu_assign_pointer(md->map, (void *)t);
|
||||
|
||||
Reference in New Issue
Block a user