diff options
author | Kulikov Vasiliy <segooon@gmail.com> | 2010-07-10 01:00:35 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-07-12 20:21:44 -0700 |
commit | 62cd69a10683bd17a2454213b8c36a4399c533ab (patch) | |
tree | 96695bebd1163f6ebf6553c931c5bacc3dc35e90 /drivers/net/jazzsonic.c | |
parent | 84ce981a076c6b2d3efec66bf92a91d1aa80c983 (diff) |
jazzsonic: free irq if sonic_open() fails
jazzsonic_open() doesn't check sonic_open() return code. If it is error
we must free requested IRQ.
Signed-off-by: Kulikov Vasiliy <segooon@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/jazzsonic.c')
-rw-r--r-- | drivers/net/jazzsonic.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/net/jazzsonic.c b/drivers/net/jazzsonic.c index 3e6aaf9e5ce..949c1f93364 100644 --- a/drivers/net/jazzsonic.c +++ b/drivers/net/jazzsonic.c @@ -82,11 +82,20 @@ static unsigned short known_revisions[] = static int jazzsonic_open(struct net_device* dev) { - if (request_irq(dev->irq, sonic_interrupt, IRQF_DISABLED, "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, IRQF_DISABLED, + "sonic", dev); + if (retval) { + printk(KERN_ERR "%s: unable to get IRQ %d.\n", + dev->name, dev->irq); + return retval; } - return sonic_open(dev); + + retval = sonic_open(dev); + if (retval) + free_irq(dev->irq, dev); + return retval; } static int jazzsonic_close(struct net_device* dev) |