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