tidy up chrdev_open
PATCH 1/1 tidy up chrdev_open
Use a single goto label for chrdev_put + return error cases.
fs/char_dev.c +14 -7
@@ -389,15 +389,22 @@ static int chrdev_open(struct inode *inocdev_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 ret; + + out_cdev_put: +cdev_put (p);return ret; }