ti-st: use goto-failpath in st_core_init
authorJiri Slaby <jslaby@suse.cz>
Wed, 5 May 2021 09:19:13 +0000 (11:19 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 May 2021 14:57:17 +0000 (16:57 +0200)
Use the classic failpath handling using gotos in st_core_init. That way,
tty_unregister_ldisc needs not be repeated on two places.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20210505091928.22010-21-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/ti-st/st_core.c

index 85315e72664440c57175365c6229f484909f5eeb..05c015140cad9f8181b164e7d7d1f5f3f863b866 100644 (file)
@@ -872,9 +872,8 @@ int st_core_init(struct st_data_s **core_data)
        st_gdata = kzalloc(sizeof(struct st_data_s), GFP_KERNEL);
        if (!st_gdata) {
                pr_err("memory allocation failed");
-               tty_unregister_ldisc(&st_ldisc_ops);
                err = -ENOMEM;
-               return err;
+               goto err_unreg_ldisc;
        }
 
        /* Initialize ST TxQ and Tx waitQ queue head. All BT/FM/GPS module skb's
@@ -889,15 +888,18 @@ int st_core_init(struct st_data_s **core_data)
        err = st_ll_init(st_gdata);
        if (err) {
                pr_err("error during st_ll initialization(%ld)", err);
-               kfree(st_gdata);
-               tty_unregister_ldisc(&st_ldisc_ops);
-               return err;
+               goto err_free_gdata;
        }
 
        INIT_WORK(&st_gdata->work_write_wakeup, work_fn_write_wakeup);
 
        *core_data = st_gdata;
        return 0;
+err_free_gdata:
+       kfree(st_gdata);
+err_unreg_ldisc:
+       tty_unregister_ldisc(&st_ldisc_ops);
+       return err;
 }
 
 void st_core_exit(struct st_data_s *st_gdata)