Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
[deliverable/linux.git] / drivers / usb / usbip / stub_tx.c
index dbcabc9dbe0dc81c499902038515857d242d3fd5..6b1e8c3f0e4b28815dcbb0539f2b7a24d023100d 100644 (file)
@@ -97,7 +97,10 @@ void stub_complete(struct urb *urb)
 
        /* link a urb to the queue of tx. */
        spin_lock_irqsave(&sdev->priv_lock, flags);
-       if (priv->unlinking) {
+       if (sdev->ud.tcp_socket == NULL) {
+               usbip_dbg_stub_tx("ignore urb for closed connection %p", urb);
+               /* It will be freed in stub_device_cleanup_urbs(). */
+       } else if (priv->unlinking) {
                stub_enqueue_ret_unlink(sdev, priv->seqnum, urb->status);
                stub_free_priv_and_urb(priv);
        } else {
@@ -229,7 +232,7 @@ static int stub_send_ret_submit(struct stub_device *sdev)
                        }
 
                        if (txsize != sizeof(pdu_header) + urb->actual_length) {
-                               dev_err(&sdev->interface->dev,
+                               dev_err(&sdev->udev->dev,
                                        "actual length of urb %d does not match iso packet sizes %zu\n",
                                        urb->actual_length,
                                        txsize-sizeof(pdu_header));
@@ -261,7 +264,7 @@ static int stub_send_ret_submit(struct stub_device *sdev)
                ret = kernel_sendmsg(sdev->ud.tcp_socket, &msg,
                                                iov,  iovnum, txsize);
                if (ret != txsize) {
-                       dev_err(&sdev->interface->dev,
+                       dev_err(&sdev->udev->dev,
                                "sendmsg failed!, retval %d for %zd\n",
                                ret, txsize);
                        kfree(iov);
@@ -336,7 +339,7 @@ static int stub_send_ret_unlink(struct stub_device *sdev)
                ret = kernel_sendmsg(sdev->ud.tcp_socket, &msg, iov,
                                     1, txsize);
                if (ret != txsize) {
-                       dev_err(&sdev->interface->dev,
+                       dev_err(&sdev->udev->dev,
                                "sendmsg failed!, retval %d for %zd\n",
                                ret, txsize);
                        usbip_event_add(&sdev->ud, SDEV_EVENT_ERROR_TCP);
This page took 0.026721 seconds and 5 git commands to generate.