diff --git a/[refs] b/[refs] index 82331ac86763..dc3f89383310 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ca30bc99527ab968707bafc09e38807de7e70c4a +refs/heads/master: a518ab9329041411526ab8e05edfda7e2715244f diff --git a/trunk/fs/char_dev.c b/trunk/fs/char_dev.c index 262fa10e213d..700697a72618 100644 --- a/trunk/fs/char_dev.c +++ b/trunk/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; }