diff options
author | Quentin Lambert <lambert.quentin@gmail.com> | 2015-03-11 15:22:00 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-03-12 11:13:41 +0100 |
commit | f6a14cf04fdb17de8a96c59518909216f6892e19 (patch) | |
tree | 9683d55a9d75dfdce47bcd78120a97c90ae727bd /drivers/staging/dgnc/dgnc_driver.c | |
parent | 64e784c4574d9015eee0b97cbf66c2eafcd38feb (diff) |
Staging: dgnc: Use goto for error handling
This patch introduces goto statments for error handling
and in cases where a lock needs to be released.
A simplified version of the semantic patch that finds this problem is as
follows: (http://coccinelle.lip6.fr)
@candidates exists@
identifier f, label;
statement s;
position p1, p2, p3;
@@
f@p1(...) {
...when any
if@p2(...) {
...when any
s
return@p3 ...;
}
...when any
}
@good1 exists@
identifier candidates.f, candidates.label;
statement candidates.s;
position candidates.p1, candidates.p2;
@@
f@p1(...) {
...when any
if(...) {
...when any
s
return ...;
}
...when any
if@p2(...) {...}
...when any
}
@depends on good1@
identifier candidates.f, candidates.label;
position candidates.p1, candidates.p3;
@@
f@p1(...) {
...when any
* return@p3 ...;
}
Signed-off-by: Quentin Lambert <lambert.quentin@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/dgnc/dgnc_driver.c')
-rw-r--r-- | drivers/staging/dgnc/dgnc_driver.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/drivers/staging/dgnc/dgnc_driver.c b/drivers/staging/dgnc/dgnc_driver.c index ec7c155e50a5..9ae9014dd144 100644 --- a/drivers/staging/dgnc/dgnc_driver.c +++ b/drivers/staging/dgnc/dgnc_driver.c @@ -549,30 +549,19 @@ static int dgnc_found_board(struct pci_dev *pdev, int id) rc = dgnc_tty_register(brd); if (rc < 0) { - dgnc_tty_uninit(brd); pr_err(DRVSTR ": Can't register tty devices (%d)\n", rc); - brd->state = BOARD_FAILED; - brd->dpastatus = BD_NOFEP; goto failed; } rc = dgnc_finalize_board_init(brd); if (rc < 0) { - dgnc_tty_uninit(brd); pr_err(DRVSTR ": Can't finalize board init (%d)\n", rc); - brd->state = BOARD_FAILED; - brd->dpastatus = BD_NOFEP; - goto failed; } rc = dgnc_tty_init(brd); if (rc < 0) { - dgnc_tty_uninit(brd); pr_err(DRVSTR ": Can't init tty devices (%d)\n", rc); - brd->state = BOARD_FAILED; - brd->dpastatus = BD_NOFEP; - goto failed; } @@ -606,6 +595,9 @@ static int dgnc_found_board(struct pci_dev *pdev, int id) return 0; failed: + dgnc_tty_uninit(brd); + brd->state = BOARD_FAILED; + brd->dpastatus = BD_NOFEP; return -ENXIO; |