On Sat, May 9, 2020 at 9:19 PM Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote: > > Lists are filled with calls to ns_parse_weakblocks(), > ns_parse_weakpages() and ns_parse_gravepages(). Handle them in the > error path, all at the same time. > > Signed-off-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx> > --- > drivers/mtd/nand/raw/nandsim.c | 23 +++++++++++++++++++---- > 1 file changed, 19 insertions(+), 4 deletions(-) > > diff --git a/drivers/mtd/nand/raw/nandsim.c b/drivers/mtd/nand/raw/nandsim.c > index e41866e49206..26d23ab5b794 100644 > --- a/drivers/mtd/nand/raw/nandsim.c > +++ b/drivers/mtd/nand/raw/nandsim.c > @@ -2273,6 +2273,7 @@ static const struct nand_controller_ops ns_controller_ops = { > */ > static int __init ns_init_module(void) > { > + struct list_head *pos, *n; > struct nand_chip *chip; > struct nandsim *ns; > int ret; > @@ -2340,11 +2341,11 @@ static int __init ns_init_module(void) > > ret = ns_parse_weakpages(); > if (ret) > - goto error; > + goto free_wb_list; > > ret = ns_parse_gravepages(); > if (ret) > - goto error; > + goto free_wp_list; > > nand_controller_init(&ns->base); > ns->base.ops = &ns_controller_ops; > @@ -2353,7 +2354,7 @@ static int __init ns_init_module(void) > ret = nand_scan(chip, 1); > if (ret) { > NS_ERR("Could not scan NAND Simulator device\n"); > - goto error; > + goto free_gp_list; > } > > if (overridesize) { > @@ -2412,9 +2413,23 @@ static int __init ns_init_module(void) > kfree(erase_block_wear); > cleanup_nand: > nand_cleanup(chip); > +free_gp_list: > + list_for_each_safe(pos, n, &grave_pages) { > + kfree(list_entry(pos, struct grave_page, list)); > + list_del(pos); Like said before, this pattern looks odd. > + } > +free_wp_list: > + list_for_each_safe(pos, n, &weak_pages) { > + kfree(list_entry(pos, struct weak_page, list)); > + list_del(pos); > + } > +free_wb_list: > + list_for_each_safe(pos, n, &weak_blocks) { > + kfree(list_entry(pos, struct weak_block, list)); > + list_del(pos); > + } > error: > kfree(ns); > - ns_free_lists(); > > return ret; > } > -- > 2.20.1 > > > ______________________________________________________ > Linux MTD discussion mailing list > http://lists.infradead.org/mailman/listinfo/linux-mtd/ -- Thanks, //richard ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/