usb_disable_device(udev, 0);
        usb_hcd_synchronize_unlinks(udev);
 
+       if (udev->parent) {
+               struct usb_port *port_dev =
+                       hdev_to_hub(udev->parent)->ports[udev->portnum - 1];
+
+               sysfs_remove_link(&udev->dev.kobj, "port");
+               sysfs_remove_link(&port_dev->dev.kobj, "device");
+       }
+
        usb_remove_ep_devs(&udev->ep0);
        usb_unlock_device(udev);
 
                goto fail;
        }
 
+       /* Create link files between child device and usb port device. */
+       if (udev->parent) {
+               struct usb_port *port_dev =
+                       hdev_to_hub(udev->parent)->ports[udev->portnum - 1];
+
+               err = sysfs_create_link(&udev->dev.kobj,
+                               &port_dev->dev.kobj, "port");
+               if (err)
+                       goto fail;
+
+               err = sysfs_create_link(&port_dev->dev.kobj,
+                               &udev->dev.kobj, "device");
+               if (err) {
+                       sysfs_remove_link(&udev->dev.kobj, "port");
+                       goto fail;
+               }
+       }
+
        (void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev);
        usb_mark_last_busy(udev);
        pm_runtime_put_sync_autosuspend(&udev->dev);