From: Christoph Hellwig Subject: [PATCH] tidy up chrdev_open Date: Mon, 11 Aug 2008 15:34:22 +0200 Message-ID: <20080811133422.GA21264@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org To: viro@zeniv.linux.org.uk Return-path: Received: from verein.lst.de ([213.95.11.210]:59632 "EHLO verein.lst.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753550AbYHKNeV (ORCPT ); Mon, 11 Aug 2008 09:34:21 -0400 Content-Disposition: inline Sender: linux-fsdevel-owner@vger.kernel.org List-ID: Use a single goto label for chrdev_put + return error cases. Index: linux-2.6/fs/char_dev.c =================================================================== --- linux-2.6.orig/fs/char_dev.c 2008-07-15 09:48:53.000000000 +0200 +++ linux-2.6/fs/char_dev.c 2008-07-15 09:50:41.000000000 +0200 @@ -389,15 +389,22 @@ static int chrdev_open(struct inode *ino 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 ret; + + out_cdev_put: + cdev_put(p); return ret; }