[Devel] [PATCH VZ9] dm-ploop: fix error handling in ploop_prepare_reloc_index_wb

Pavel Tikhomirov ptikhomirov at virtuozzo.com
Thu Jul 3 12:42:45 MSK 2025


1) Only cleanup what was acquired, e.g.: do not clear MD_UPDATING
   if we didn't set it.
2) Do not use add_to_wblist uninitialized on error paths.
3) Make label names self-descriptive.

https://virtuozzo.atlassian.net/browse/VSTOR-108540
Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
 drivers/md/dm-ploop-map.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c
index 11767dd91950..55b39874beee 100644
--- a/drivers/md/dm-ploop-map.c
+++ b/drivers/md/dm-ploop-map.c
@@ -2730,14 +2730,14 @@ int ploop_prepare_reloc_index_wb(struct ploop *ploop,
 	/* Keep this test to be the same as in delay_if_md_busy */
 	if (test_bit(MD_WRITEBACK, &md->status) || test_bit(MD_UPDATING, &md->status)) {
 		err = -EBUSY;
-		goto out_error;
+		goto out_unlock;
 	} else {
 		set_bit(MD_UPDATING, &md->status);
 	}
 
 	err = ploop_prepare_bat_update(ploop, md, type);
 	if (err)
-		goto out_error;
+		goto out_clear_updating;
 
 	add_to_wblist = ploop_md_make_dirty(ploop, md);
 
@@ -2765,10 +2765,11 @@ int ploop_prepare_reloc_index_wb(struct ploop *ploop,
 out_reset:
 	ploop_break_bat_update(ploop, md, piwb);
 	spin_lock_irq(&ploop->bat_lock);
-out_error:
 	if (add_to_wblist)
 		clear_bit(MD_DIRTY, &md->status);
+out_clear_updating:
 	clear_bit(MD_UPDATING, &md->status);
+out_unlock:
 	spin_unlock_irq(&ploop->bat_lock);
 
 	return err;
-- 
2.49.0



More information about the Devel mailing list