mtd: rawnand: nandsim: Reorganize ns_cleanup_module()
authorMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 25 May 2020 08:58:51 +0000 (10:58 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Sun, 31 May 2020 08:53:40 +0000 (10:53 +0200)
Reorganize ns_cleanup_module() to fit the reworked exit path of
ns_init_module().

There is no need for a ns_free_lists() function anymore, so drop it.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20200525085851.17682-18-miquel.raynal@bootlin.com
drivers/mtd/nand/raw/nandsim.c

index 7076acfbe0f44ff66447ab4d8ec0f7c49e4a6584..0a5cb77966cc7e0d615968fd27969079ddcf9ca6 100644 (file)
@@ -978,24 +978,6 @@ static int ns_read_error(unsigned int page_no)
        return 0;
 }
 
-static void ns_free_lists(void)
-{
-       struct list_head *pos, *n;
-       list_for_each_safe(pos, n, &weak_blocks) {
-               list_del(pos);
-               kfree(list_entry(pos, struct weak_block, list));
-       }
-       list_for_each_safe(pos, n, &weak_pages) {
-               list_del(pos);
-               kfree(list_entry(pos, struct weak_page, list));
-       }
-       list_for_each_safe(pos, n, &grave_pages) {
-               list_del(pos);
-               kfree(list_entry(pos, struct grave_page, list));
-       }
-       kfree(erase_block_wear);
-}
-
 static int ns_setup_wear_reporting(struct mtd_info *mtd)
 {
        size_t mem;
@@ -2443,12 +2425,30 @@ static void __exit ns_cleanup_module(void)
 {
        struct nand_chip *chip = mtd_to_nand(nsmtd);
        struct nandsim *ns = nand_get_controller_data(chip);
+       struct list_head *pos, *n;
 
        ns_debugfs_remove(ns);
-       ns_free(ns);    /* Free nandsim private resources */
-       nand_release(chip); /* Unregister driver */
-       kfree(ns);        /* Free other structures */
-       ns_free_lists();
+       WARN_ON(mtd_device_unregister(nsmtd));
+       ns_free(ns);
+       kfree(erase_block_wear);
+       nand_cleanup(chip);
+
+       list_for_each_safe(pos, n, &grave_pages) {
+               list_del(pos);
+               kfree(list_entry(pos, struct grave_page, list));
+       }
+
+       list_for_each_safe(pos, n, &weak_pages) {
+               list_del(pos);
+               kfree(list_entry(pos, struct weak_page, list));
+       }
+
+       list_for_each_safe(pos, n, &weak_blocks) {
+               list_del(pos);
+               kfree(list_entry(pos, struct weak_block, list));
+       }
+
+       kfree(ns);
 }
 
 module_exit(ns_cleanup_module);