diff options
author | Christoph Hellwig <hch@lst.de> | 2008-08-11 15:34:22 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2008-10-23 05:12:59 -0400 |
commit | a518ab9329041411526ab8e05edfda7e2715244f (patch) | |
tree | b615e9ad591b4b7f0ee75ce25e26e1718066192b /fs/char_dev.c | |
parent | ca30bc99527ab968707bafc09e38807de7e70c4a (diff) | |
download | lwn-a518ab9329041411526ab8e05edfda7e2715244f.tar.gz lwn-a518ab9329041411526ab8e05edfda7e2715244f.zip |
[PATCH] tidy up chrdev_open
Use a single goto label for chrdev_put + return error cases.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/char_dev.c')
-rw-r--r-- | fs/char_dev.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/fs/char_dev.c b/fs/char_dev.c index 262fa10e213d..700697a72618 100644 --- a/fs/char_dev.c +++ b/fs/char_dev.c @@ -386,15 +386,22 @@ static int chrdev_open(struct inode *inode, struct file *filp) cdev_put(new); if (ret) return ret; + + ret = -ENXIO; filp->f_op = fops_get(p->ops); - if (!filp->f_op) { - cdev_put(p); - return -ENXIO; - } - if (filp->f_op->open) + if (!filp->f_op) + goto out_cdev_put; + + if (filp->f_op->open) { ret = filp->f_op->open(inode,filp); - if (ret) - cdev_put(p); + if (ret) + goto out_cdev_put; + } + + return 0; + + out_cdev_put: + cdev_put(p); return ret; } |