diff options
author | Kristian Høgsberg <krh@redhat.com> | 2007-06-20 17:48:07 -0400 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-06-20 18:09:41 -0400 |
commit | 24315c5e6f508edd84e996d67daef3d1bcc72f8b (patch) | |
tree | 02ea28b57eac01929dd8b7bcb761527b92941af5 /drivers/firewire | |
parent | 18b461796b737f94286f73710debc8649467161b (diff) |
firewire: Only set client->iso_context if allocation was successful.
This patch fixes an OOPS on cdev release for an fd where iso context
creation failed.
Signed-off-by: Kristian Høgsberg <krh@redhat.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire')
-rw-r--r-- | drivers/firewire/fw-cdev.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/firewire/fw-cdev.c b/drivers/firewire/fw-cdev.c index 5d402d63799f..dbb76427d529 100644 --- a/drivers/firewire/fw-cdev.c +++ b/drivers/firewire/fw-cdev.c | |||
@@ -640,6 +640,7 @@ iso_callback(struct fw_iso_context *context, u32 cycle, | |||
640 | static int ioctl_create_iso_context(struct client *client, void *buffer) | 640 | static int ioctl_create_iso_context(struct client *client, void *buffer) |
641 | { | 641 | { |
642 | struct fw_cdev_create_iso_context *request = buffer; | 642 | struct fw_cdev_create_iso_context *request = buffer; |
643 | struct fw_iso_context *context; | ||
643 | 644 | ||
644 | if (request->channel > 63) | 645 | if (request->channel > 63) |
645 | return -EINVAL; | 646 | return -EINVAL; |
@@ -661,15 +662,17 @@ static int ioctl_create_iso_context(struct client *client, void *buffer) | |||
661 | return -EINVAL; | 662 | return -EINVAL; |
662 | } | 663 | } |
663 | 664 | ||
665 | context = fw_iso_context_create(client->device->card, | ||
666 | request->type, | ||
667 | request->channel, | ||
668 | request->speed, | ||
669 | request->header_size, | ||
670 | iso_callback, client); | ||
671 | if (IS_ERR(context)) | ||
672 | return PTR_ERR(context); | ||
673 | |||
664 | client->iso_closure = request->closure; | 674 | client->iso_closure = request->closure; |
665 | client->iso_context = fw_iso_context_create(client->device->card, | 675 | client->iso_context = context; |
666 | request->type, | ||
667 | request->channel, | ||
668 | request->speed, | ||
669 | request->header_size, | ||
670 | iso_callback, client); | ||
671 | if (IS_ERR(client->iso_context)) | ||
672 | return PTR_ERR(client->iso_context); | ||
673 | 676 | ||
674 | /* We only support one context at this time. */ | 677 | /* We only support one context at this time. */ |
675 | request->handle = 0; | 678 | request->handle = 0; |