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 <ptikhomi...@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 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel