diff options
author | Andrew Morton <akpm@linux-foundation.org> | 2007-04-26 12:36:49 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-04-26 12:36:49 +0400 |
commit | 1c8ea5aee0b16409295d96a5e8984bd902f06a77 (patch) | |
tree | 9761ea7c4fc8a315549529303d7842ed968e6763 /net/irda | |
parent | 14690fc649f4c59712f497135f7323eb8ceceaaf (diff) | |
download | linux-1c8ea5aee0b16409295d96a5e8984bd902f06a77.tar.xz |
[IRDA] irda_device_dongle_init: fix kzalloc(GFP_KERNEL) in spinlock
Fix http://bugzilla.kernel.org/show_bug.cgi?id=8343
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/irda')
-rw-r--r-- | net/irda/irda_device.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/net/irda/irda_device.c b/net/irda/irda_device.c index e717801b38f9..7b5def1ea633 100644 --- a/net/irda/irda_device.c +++ b/net/irda/irda_device.c @@ -375,7 +375,7 @@ EXPORT_SYMBOL(alloc_irdadev); dongle_t *irda_device_dongle_init(struct net_device *dev, int type) { struct dongle_reg *reg; - dongle_t *dongle = NULL; + dongle_t *dongle = kzalloc(sizeof(dongle_t), GFP_KERNEL); might_sleep(); @@ -397,19 +397,14 @@ dongle_t *irda_device_dongle_init(struct net_device *dev, int type) if (!reg || !try_module_get(reg->owner) ) { IRDA_ERROR("IrDA: Unable to find requested dongle type %x\n", type); - goto out; + kfree(dongle); + dongle = NULL; + } + if (dongle) { + /* Bind the registration info to this particular instance */ + dongle->issue = reg; + dongle->dev = dev; } - - /* Allocate dongle info for this instance */ - dongle = kzalloc(sizeof(dongle_t), GFP_KERNEL); - if (!dongle) - goto out; - - /* Bind the registration info to this particular instance */ - dongle->issue = reg; - dongle->dev = dev; - - out: spin_unlock(&dongles->hb_spinlock); return dongle; } |