The commit is pushed to "branch-rh9-5.14.0-427.55.1.vz9.82.x-ovz" and will 
appear at g...@bitbucket.org:openvz/vzkernel.git
after rh9-5.14.0-427.55.1.vz9.82.2
------>
commit 8a004e859176b6829f0b93da4045660d149fa761
Author: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>
Date:   Fri Jul 4 15:36:58 2025 +0800

    dm-ploop: fix error handling in ploop_resize
    
    1) Do not use goto when simple return is enough.
    2) Propagate error code from ploop_prealloc_md_pages().
    3) Only cleanup what was acquired and make label names self-descriptive.
    4) Fix unhandled ploop_suspend_submitting_pios errors.
    
    https://virtuozzo.atlassian.net/browse/VSTOR-108540
    Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>
    Reviewed-by: Andrey Zhadchenko <andrey.zhadche...@virtuozzo.com>
    
    Feature: dm-ploop: ploop target driver
---
 drivers/md/dm-ploop-cmd.c | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/drivers/md/dm-ploop-cmd.c b/drivers/md/dm-ploop-cmd.c
index 691eefd0b9f65..8a9e86bd028bf 100644
--- a/drivers/md/dm-ploop-cmd.c
+++ b/drivers/md/dm-ploop-cmd.c
@@ -567,7 +567,7 @@ static int ploop_resize(struct ploop *ploop, sector_t 
new_sectors)
        struct ploop_pvd_header *hdr;
        sector_t old_sectors;
        struct md_page *md0;
-       int ret = -ENOMEM;
+       int ret;
 
        if (ploop->maintaince)
                return -EBUSY;
@@ -596,9 +596,10 @@ static int ploop_resize(struct ploop *ploop, sector_t 
new_sectors)
        nr_bat_entries = SEC_TO_CLU(ploop, new_sectors);
 
        /* Memory for new md pages */
-       if (ploop_prealloc_md_pages(&cmd.resize.md_pages_root,
-                             ploop->nr_bat_entries, nr_bat_entries) < 0)
-               goto err;
+       ret = ploop_prealloc_md_pages(&cmd.resize.md_pages_root,
+                                     ploop->nr_bat_entries, nr_bat_entries);
+       if (ret)
+               return ret;
 
        size = (PLOOP_MAP_OFFSET + nr_bat_entries) * sizeof(map_index_t);
        nr_bat_clusters = DIV_ROUND_UP(size, CLU_SIZE(ploop));
@@ -610,16 +611,20 @@ static int ploop_resize(struct ploop *ploop, sector_t 
new_sectors)
                                                    ploop->nr_bat_entries);
        /* Memory for holes_bitmap */
        cmd.resize.holes_bitmap = kvmalloc(size, GFP_KERNEL);
-       if (!cmd.resize.holes_bitmap)
-               goto err;
+       if (!cmd.resize.holes_bitmap) {
+               ret = -ENOMEM;
+               goto err_free_md_pages;
+       }
 
        /* Mark all new bitmap memory as holes */
        old_size = DIV_ROUND_UP(ploop->hb_nr, 8);
        memset(cmd.resize.holes_bitmap + old_size, 0xff, size - old_size);
 
        cmd.resize.pio = ploop_alloc_pio_with_pages(ploop);
-       if (!cmd.resize.pio)
-               goto err;
+       if (!cmd.resize.pio) {
+               ret = -ENOMEM;
+               goto err_free_holes_bitmap;
+       }
 
        cmd.resize.clu = UINT_MAX;
        cmd.resize.dst_clu = nr_old_bat_clusters;
@@ -630,13 +635,16 @@ static int ploop_resize(struct ploop *ploop, sector_t 
new_sectors)
        cmd.resize.new_sectors = new_sectors;
        cmd.resize.md0 = md0;
 
-       ploop_suspend_submitting_pios(ploop);
+       ret = ploop_suspend_submitting_pios(ploop);
+       if (ret)
+               goto err_free_pio;
        ret = ploop_process_resize_cmd(ploop, &cmd);
        ploop_resume_submitting_pios(ploop);
-err:
-       if (cmd.resize.pio)
-               ploop_free_pio_with_pages(ploop, cmd.resize.pio);
+err_free_pio:
+       ploop_free_pio_with_pages(ploop, cmd.resize.pio);
+err_free_holes_bitmap:
        kvfree(cmd.resize.holes_bitmap);
+err_free_md_pages:
        ploop_free_md_pages_tree(&cmd.resize.md_pages_root);
        return ret;
 }
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to