| .. | .. |
|---|
| 401 | 401 | int err; |
|---|
| 402 | 402 | |
|---|
| 403 | 403 | while ((urb = usb_get_from_anchor(&drv_data->deferred))) { |
|---|
| 404 | + usb_anchor_urb(urb, &drv_data->tx_anchor); |
|---|
| 405 | + |
|---|
| 404 | 406 | err = usb_submit_urb(urb, GFP_ATOMIC); |
|---|
| 405 | | - if (err) |
|---|
| 407 | + if (err) { |
|---|
| 408 | + kfree(urb->setup_packet); |
|---|
| 409 | + usb_unanchor_urb(urb); |
|---|
| 410 | + usb_free_urb(urb); |
|---|
| 406 | 411 | break; |
|---|
| 412 | + } |
|---|
| 407 | 413 | |
|---|
| 408 | 414 | drv_data->tx_in_flight++; |
|---|
| 415 | + usb_free_urb(urb); |
|---|
| 409 | 416 | } |
|---|
| 410 | | - usb_scuttle_anchored_urbs(&drv_data->deferred); |
|---|
| 417 | + |
|---|
| 418 | + /* Cleanup the rest deferred urbs. */ |
|---|
| 419 | + while ((urb = usb_get_from_anchor(&drv_data->deferred))) { |
|---|
| 420 | + kfree(urb->setup_packet); |
|---|
| 421 | + usb_free_urb(urb); |
|---|
| 422 | + } |
|---|
| 411 | 423 | } |
|---|
| 412 | 424 | |
|---|
| 413 | 425 | static int nfcmrvl_resume(struct usb_interface *intf) |
|---|