|
@@ -607,7 +607,9 @@ static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
|
|
|
dev_info(dev, "SetAddress Request (%d) to port %d\n",
|
|
|
ctrlreq->wValue, vdev->rhport);
|
|
|
|
|
|
- vdev->udev = urb->dev;
|
|
|
+ if (vdev->udev)
|
|
|
+ usb_put_dev(vdev->udev);
|
|
|
+ vdev->udev = usb_get_dev(urb->dev);
|
|
|
|
|
|
spin_lock(&vdev->ud.lock);
|
|
|
vdev->ud.status = VDEV_ST_USED;
|
|
@@ -627,8 +629,9 @@ static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
|
|
|
"Get_Descriptor to device 0 "
|
|
|
"(get max pipe size)\n");
|
|
|
|
|
|
- /* FIXME: reference count? (usb_get_dev()) */
|
|
|
- vdev->udev = urb->dev;
|
|
|
+ if (vdev->udev)
|
|
|
+ usb_put_dev(vdev->udev);
|
|
|
+ vdev->udev = usb_get_dev(urb->dev);
|
|
|
goto out;
|
|
|
|
|
|
default:
|
|
@@ -887,6 +890,10 @@ static void vhci_device_reset(struct usbip_device *ud)
|
|
|
vdev->speed = 0;
|
|
|
vdev->devid = 0;
|
|
|
|
|
|
+ if (vdev->udev)
|
|
|
+ usb_put_dev(vdev->udev);
|
|
|
+ vdev->udev = NULL;
|
|
|
+
|
|
|
ud->tcp_socket = NULL;
|
|
|
|
|
|
ud->status = VDEV_ST_NULL;
|