]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/char_dev.c
[PATCH] tidy up chrdev_open
[linux-2.6-omap-h63xx.git] / fs / char_dev.c
index 262fa10e213d571c4d14e1c6b08a3c5861e55e03..700697a726187863a3d4557b27410192ad7d45d9 100644 (file)
@@ -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;
 }