| From d657e02caac44de5b858bc66b6788c23d82d1f33 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 5 Dec 2024 19:41:52 +0800 |
| Subject: dm array: fix unreleased btree blocks on closing a faulty array |
| cursor |
| |
| From: Ming-Hung Tsai <mtsai@redhat.com> |
| |
| [ Upstream commit 626f128ee9c4133b1cfce4be2b34a1508949370e ] |
| |
| 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: fdd1315aa5f0 ("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> |
| --- |
| drivers/md/persistent-data/dm-array.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/md/persistent-data/dm-array.c b/drivers/md/persistent-data/dm-array.c |
| index 4866ff56125f..0850dfdffc8c 100644 |
| --- a/drivers/md/persistent-data/dm-array.c |
| +++ b/drivers/md/persistent-data/dm-array.c |
| @@ -960,10 +960,10 @@ EXPORT_SYMBOL_GPL(dm_array_cursor_begin); |
| |
| void dm_array_cursor_end(struct dm_array_cursor *c) |
| { |
| - if (c->block) { |
| + if (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); |
| |
| -- |
| 2.39.5 |
| |