Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 48739
b: refs/heads/master
c: af59cf4
h: refs/heads/master
i:
  48737: cd68c7b
  48735: 50bdc07
v: v3
  • Loading branch information
Pete Zaitcev authored and Greg Kroah-Hartman committed Feb 16, 2007
1 parent f0ce8c3 commit 012f5cc
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 28 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 23004e241ccc03678592a8b392573e8514ec962f
refs/heads/master: af59cf404fc7ad6cc642de9e78252fb264917611
35 changes: 8 additions & 27 deletions trunk/drivers/usb/serial/airprime.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,6 @@ static void airprime_read_bulk_callback(struct urb *urb)
if (urb->status) {
dbg("%s - nonzero read bulk status received: %d",
__FUNCTION__, urb->status);
/* something happened, so free up the memory for this urb */
if (urb->transfer_buffer) {
kfree (urb->transfer_buffer);
urb->transfer_buffer = NULL;
}
return;
}
usb_serial_debug_data(debug, &port->dev, __FUNCTION__, urb->actual_length, data);
Expand Down Expand Up @@ -146,6 +141,8 @@ static int airprime_open(struct usb_serial_port *port, struct file *filp)
airprime_read_bulk_callback, port);
result = usb_submit_urb(urb, GFP_KERNEL);
if (result) {
usb_free_urb(urb);
kfree(buffer);
dev_err(&port->dev,
"%s - failed submitting read urb %d for port %d, error %d\n",
__FUNCTION__, i, port->number, result);
Expand All @@ -160,27 +157,12 @@ static int airprime_open(struct usb_serial_port *port, struct file *filp)
/* some error happened, cancel any submitted urbs and clean up anything that
got allocated successfully */

for ( ; i >= 0; --i) {
while (i-- != 0) {
urb = priv->read_urbp[i];
if (urb) {
/* This urb was submitted successfully. So we have to
cancel it.
Unlinking the urb will invoke read_bulk_callback()
with an error status, so its transfer buffer will
be freed there */
if (usb_unlink_urb (urb) != -EINPROGRESS) {
/* comments in drivers/usb/core/urb.c say this
can only happen if the urb was never submitted,
or has completed already.
Either way we may have to free the transfer
buffer here. */
if (urb->transfer_buffer) {
kfree (urb->transfer_buffer);
urb->transfer_buffer = NULL;
}
}
usb_free_urb (urb);
}
buffer = urb->transfer_buffer;
usb_kill_urb (urb);
usb_free_urb (urb);
kfree (buffer);
}

out:
Expand All @@ -194,10 +176,9 @@ static void airprime_close(struct usb_serial_port *port, struct file * filp)

dbg("%s - port %d", __FUNCTION__, port->number);

/* killing the urb will invoke read_bulk_callback() with an error status,
so the transfer buffer will be freed there */
for (i = 0; i < NUM_READ_URBS; ++i) {
usb_kill_urb (priv->read_urbp[i]);
kfree (priv->read_urbp[i]->transfer_buffer);
usb_free_urb (priv->read_urbp[i]);
}

Expand Down

0 comments on commit 012f5cc

Please sign in to comment.