Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Kulikov Vasiliy and committed by
David S. Miller
62cd69a1 84ce981a

+13 -4
+13 -4
drivers/net/jazzsonic.c
··· 82 82 83 83 static int jazzsonic_open(struct net_device* dev) 84 84 { 85 - if (request_irq(dev->irq, sonic_interrupt, IRQF_DISABLED, "sonic", dev)) { 86 - printk(KERN_ERR "%s: unable to get IRQ %d.\n", dev->name, dev->irq); 87 - return -EAGAIN; 85 + int retval; 86 + 87 + retval = request_irq(dev->irq, sonic_interrupt, IRQF_DISABLED, 88 + "sonic", dev); 89 + if (retval) { 90 + printk(KERN_ERR "%s: unable to get IRQ %d.\n", 91 + dev->name, dev->irq); 92 + return retval; 88 93 } 89 - return sonic_open(dev); 94 + 95 + retval = sonic_open(dev); 96 + if (retval) 97 + free_irq(dev->irq, dev); 98 + return retval; 90 99 } 91 100 92 101 static int jazzsonic_close(struct net_device* dev)