dm array: fix unreleased btree blocks on closing a faulty array cursor
[ Upstream commit626f128ee9] The cached block pointer in dm_array_cursor might be NULL if it reaches an unreadable array block, or the array is empty. Therefore, dm_array_cursor_end() should call dm_btree_cursor_end() unconditionally, to prevent leaving unreleased btree blocks. This fix can be verified using the "array_cursor/iterate/empty" test in dm-unit: dm-unit run /pdata/array_cursor/iterate/empty --kernel-dir <KERNEL_DIR> Signed-off-by: Ming-Hung Tsai <mtsai@redhat.com> Fixes:fdd1315aa5("dm array: introduce cursor api") Reviewed-by: Joe Thornber <thornber@redhat.com> Signed-off-by: Mike Snitzer <snitzer@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
6002bec535
commit
14f0e64c2f
@@ -960,10 +960,10 @@ EXPORT_SYMBOL_GPL(dm_array_cursor_begin);
|
|||||||
|
|
||||||
void dm_array_cursor_end(struct dm_array_cursor *c)
|
void dm_array_cursor_end(struct dm_array_cursor *c)
|
||||||
{
|
{
|
||||||
if (c->block) {
|
if (c->block)
|
||||||
unlock_ablock(c->info, c->block);
|
unlock_ablock(c->info, c->block);
|
||||||
dm_btree_cursor_end(&c->cursor);
|
|
||||||
}
|
dm_btree_cursor_end(&c->cursor);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dm_array_cursor_end);
|
EXPORT_SYMBOL_GPL(dm_array_cursor_end);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user