lockd: release reference to nsm_handle in nlm_host_rebooted
[safe/jmp/linux-2.6] / drivers / bluetooth / btusb.c
index 7ba91aa..a699f09 100644 (file)
@@ -307,6 +307,7 @@ static void btusb_bulk_complete(struct urb *urb)
                return;
 
        usb_anchor_urb(urb, &data->bulk_anchor);
+       usb_mark_last_busy(data->udev);
 
        err = usb_submit_urb(urb, GFP_ATOMIC);
        if (err < 0) {
@@ -591,6 +592,7 @@ static int btusb_close(struct hci_dev *hdev)
                return 0;
 
        cancel_work_sync(&data->work);
+       cancel_work_sync(&data->waker);
 
        clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
        clear_bit(BTUSB_BULK_RUNNING, &data->flags);
@@ -599,11 +601,13 @@ static int btusb_close(struct hci_dev *hdev)
        btusb_stop_traffic(data);
        err = usb_autopm_get_interface(data->intf);
        if (err < 0)
-               return 0;
+               goto failed;
 
        data->intf->needs_remote_wakeup = 0;
        usb_autopm_put_interface(data->intf);
 
+failed:
+       usb_scuttle_anchored_urbs(&data->deferred);
        return 0;
 }
 
@@ -1063,7 +1067,7 @@ static int btusb_suspend(struct usb_interface *intf, pm_message_t message)
                return 0;
 
        spin_lock_irq(&data->txlock);
-       if (!(interface_to_usbdev(intf)->auto_pm && data->tx_in_flight)) {
+       if (!((message.event & PM_EVENT_AUTO) && data->tx_in_flight)) {
                set_bit(BTUSB_SUSPENDING, &data->flags);
                spin_unlock_irq(&data->txlock);
        } else {