From patchwork Sat Jul 10 11:01:00 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kulikov Vasiliy X-Patchwork-Id: 58470 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 0E213B6F0C for ; Sat, 10 Jul 2010 21:01:49 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754614Ab0GJLBo (ORCPT ); Sat, 10 Jul 2010 07:01:44 -0400 Received: from mail-qy0-f174.google.com ([209.85.216.174]:59425 "EHLO mail-qy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754287Ab0GJLBn (ORCPT ); Sat, 10 Jul 2010 07:01:43 -0400 Received: by qyk35 with SMTP id 35so711617qyk.19 for ; Sat, 10 Jul 2010 04:01:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer; bh=BMnTkwceK1xV2IlAeF1ztrafUP5y4cz4sAnzCOoc8dg=; b=etyFIJbQPxetZd5+NYYFlq6QeDmUtFRJVQdoC94ij6P9TQZjN9zsNph9v7blz0nDpw cRJ9L3YEh+RKFAabCULnhzDPPxHjTL1eXlK5RSk/HLx4nUdNfYcf2FfUb7xl2ImnzFmB 5RU1EKCWTRIcIDzIHtmd6H3jS2ZGYTBwvYn0s= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=SJHKA0hfZa8oI6cgMaA5DU0IH7t4dXFwDrIm2pzgyrl8zKecc7RRyeaws8ejjkfWtV wJJES1rHFGLAQa+lGFdOdsFiALKWHnwfG1IBdk0MrQ+77bWe+QV4+4IC1nWO/xniWFoC bmG2LPlMbVRdF0aZK+vIWeAgsj5O4elZFvZU0= Received: by 10.224.114.211 with SMTP id f19mr88219qaq.228.1278759702325; Sat, 10 Jul 2010 04:01:42 -0700 (PDT) Received: from localhost ([213.87.87.76]) by mx.google.com with ESMTPS id j28sm8779570qck.11.2010.07.10.04.01.23 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sat, 10 Jul 2010 04:01:41 -0700 (PDT) From: Kulikov Vasiliy To: kernel-janitors@vger.kernel.org Cc: "David S. Miller" , Finn Thain , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , Tejun Heo , Geert Uytterhoeven , netdev@vger.kernel.org Subject: [PATCH 2/3] macsonic: free irq if sonic_open() fails Date: Sat, 10 Jul 2010 15:01:00 +0400 Message-Id: <1278759661-7731-1-git-send-email-segooon@gmail.com> X-Mailer: git-send-email 1.7.0.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org macsonic_open() doesn't check sonic_open() return code. If it is error we must free requested IRQ. Signed-off-by: Kulikov Vasiliy --- drivers/net/macsonic.c | 36 +++++++++++++++++++++++++++--------- 1 files changed, 27 insertions(+), 9 deletions(-) diff --git a/drivers/net/macsonic.c b/drivers/net/macsonic.c index adb54fe..3730762 100644 --- a/drivers/net/macsonic.c +++ b/drivers/net/macsonic.c @@ -140,21 +140,39 @@ static irqreturn_t macsonic_interrupt(int irq, void *dev_id) static int macsonic_open(struct net_device* dev) { - if (request_irq(dev->irq, sonic_interrupt, IRQ_FLG_FAST, "sonic", dev)) { - printk(KERN_ERR "%s: unable to get IRQ %d.\n", dev->name, dev->irq); - return -EAGAIN; + int retval; + + retval = request_irq(dev->irq, sonic_interrupt, IRQ_FLG_FAST, + "sonic", dev); + if (retval) { + printk(KERN_ERR "%s: unable to get IRQ %d.\n", + dev->name, dev->irq); + goto err; } /* Under the A/UX interrupt scheme, the onboard SONIC interrupt comes * in at priority level 3. However, we sometimes get the level 2 inter- * rupt as well, which must prevent re-entrance of the sonic handler. */ - if (dev->irq == IRQ_AUTO_3) - if (request_irq(IRQ_NUBUS_9, macsonic_interrupt, IRQ_FLG_FAST, "sonic", dev)) { - printk(KERN_ERR "%s: unable to get IRQ %d.\n", dev->name, IRQ_NUBUS_9); - free_irq(dev->irq, dev); - return -EAGAIN; + if (dev->irq == IRQ_AUTO_3) { + retval = request_irq(IRQ_NUBUS_9, macsonic_interrupt, + IRQ_FLG_FAST, "sonic", dev); + if (retval) { + printk(KERN_ERR "%s: unable to get IRQ %d.\n", + dev->name, IRQ_NUBUS_9); + goto err_irq; } - return sonic_open(dev); + } + retval = sonic_open(dev); + if (retval) + goto err_irq_nubus; + return 0; + +err_irq_nubus: + free_irq(IRQ_NUBUS_9, dev); +err_irq: + free_irq(dev->irq, dev); +err: + return retval; } static int macsonic_close(struct net_device* dev)