Sunday, 18 June 2017

Orico USB3.0 enclosure inactivity/disconnect fix

Many hardware (especially cheap) vendors will sell the same product but replace and gut the internal electronics. This makes finding compatible/previously successful devices a PITA. One such recent example is a cheap Orico external USB 3.0 enclosure for 2.5" harddisks that is readily available on place such as Amazon.

I bought 2 of these enclosures to use with my various Linux boxes and sure enough they had different USB vendor ids and they worked differently.

The Problem

The working enclosure had an unknown vendor/product ID 0080:a0001 (even when looking at the June 2017 usb id list) and describes itself as "External USB 3.0" but it has been trouble free in the 7+ months that I've had it and this has been attached to a RPi providing NAS for various Kodi and network music players - the enclosed harddisk also successfully spins down and up with no issues.

The troublesome enclosue identifies itself as a 357d:7788 which is apparently a Sharkoon QuickPort XT and descibes itself as "USB to ATA/ATAPI Bridge". Whlist this device will be recognised on my various Linux hardware (desktop/laptop/RPi) and different USB hosts (USB 2.0 and 3.0) it exhibits problems after a period of inactivity - the workaround is to unplug the device and reattach but this is a pain.

On initial attach:

[13344.377088] usb 2-1.8: new high-speed USB device number 11 using ehci-pci
[13344.456463] usb 2-1.8: New USB device found, idVendor=357d, idProduct=7788
[13344.456470] usb 2-1.8: New USB device strings: Mfr=10, Product=11, SerialNumber=3
[13344.456474] usb 2-1.8: Product: USB to ATA/ATAPI Bridge
[13344.456477] usb 2-1.8: Manufacturer: JMicron
[13344.456480] usb 2-1.8: SerialNumber: 000012345678
[13344.457185] scsi host7: uas
[13344.458356] scsi 7:0:0:0: Direct-Access Hitachi HTS545050A7E380 0100 PQ: 0 ANSI: 6
[13344.486979] sd 7:0:0:0: Attached scsi generic sg4 type 0
[13344.487248] sd 7:0:0:0: [sdd] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[13344.487253] sd 7:0:0:0: [sdd] 4096-byte physical blocks
[13344.488998] sd 7:0:0:0: [sdd] Write Protect is off
[13344.489003] sd 7:0:0:0: [sdd] Mode Sense: 67 00 10 08
[13344.489595] sd 7:0:0:0: [sdd] Write cache: enabled, read cache: enabled, supports DPO and FUA
[13344.595091] sdd: sdd1
[13344.598031] sd 7:0:0:0: [sdd] Attached SCSI disk
[13344.924384] EXT4-fs (sdd1): mounting ext2 file system using the ext4 subsystem
[13344.955597] EXT4-fs (sdd1): mounted filesystem without journal. Opts: (null)

and after a period with no access to the disk $ ls: reading directory '/run/media/ray/533f2f7d-cc19-4f4a-9b3e-4254ff7d8c6d/2017-04/tmp/': Input/output error with the system reporting:

[13914.040172] sd 7:0:0:0: [sdd] tag#0 uas_eh_abort_handler 0 uas-tag 1 inflight: CMD
[13914.040182] sd 7:0:0:0: [sdd] tag#0 CDB: Read(10) 28 00 0b bc de 78 00 00 08 00
[13914.040279] scsi host7: uas_eh_bus_reset_handler start
[13914.107202] usb 2-1.8: reset high-speed USB device number 11 using ehci-pci
[13914.186467] scsi host7: uas_eh_bus_reset_handler success
[13924.269081] sd 7:0:0:0: [sdd] tag#0 uas_eh_abort_handler 0 uas-tag 1 inflight: CMD
[13924.269087] sd 7:0:0:0: [sdd] tag#0 CDB: Test Unit Ready 00 00 00 00 00 00
[13924.269090] scsi host7: uas_eh_bus_reset_handler start
[13924.336064] usb 2-1.8: reset high-speed USB device number 11 using ehci-pci
[13924.412088] usb 2-1.8: device descriptor read/64, error -71
[13924.593066] usb 2-1.8: device descriptor read/64, error -71
[13924.765091] usb 2-1.8: reset high-speed USB device number 11 using ehci-pci
[13924.841055] usb 2-1.8: device descriptor read/64, error -71
[13925.025064] usb 2-1.8: device descriptor read/64, error -71
[13925.197012] usb 2-1.8: reset high-speed USB device number 11 using ehci-pci
[13925.614072] usb 2-1.8: device not accepting address 11, error -71
[13925.678075] usb 2-1.8: reset high-speed USB device number 11 using ehci-pci
[13926.093101] usb 2-1.8: device not accepting address 11, error -71
[13926.093369] scsi host7: uas_eh_bus_reset_handler FAILED err -19
[13926.093377] sd 7:0:0:0: Device offlined - not ready after error recovery
[13926.093388] sd 7:0:0:0: [sdd] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_TIMEOUT
[13926.093394] sd 7:0:0:0: [sdd] tag#0 CDB: Read(10) 28 00 0b bc de 78 00 00 08 00
[13926.093399] blk_update_request: I/O error, dev sdd, sector 196927096
[13926.093479] EXT4-fs warning (device sdd1): dx_probe:741: inode #6152361: lblock 0: comm ls: error -5 reading directory block
[13926.093737] usb 2-1.8: USB disconnect, device number 11
[13926.095825] blk_update_request: I/O error, dev sdd, sector 0
[13926.097895] sd 7:0:0:0: [sdd] Synchronizing SCSI cache
[13926.218078] sd 7:0:0:0: [sdd] Synchronize Cache(10) failed: Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[13926.286074] usb 2-1.8: new high-speed USB device number 12 using ehci-pci
[13926.362061] usb 2-1.8: device descriptor read/64, error -71
[13926.544991] usb 2-1.8: device descriptor read/64, error -71
[13926.717036] usb 2-1.8: new high-speed USB device number 13 using ehci-pci
[13926.794068] usb 2-1.8: device descriptor read/64, error -71
[13926.977073] usb 2-1.8: device descriptor read/64, error -71
[13927.149077] usb 2-1.8: new high-speed USB device number 14 using ehci-pci
[13927.565093] usb 2-1.8: device not accepting address 14, error -71
[13927.629012] usb 2-1.8: new high-speed USB device number 15 using ehci-pci
[13928.045056] usb 2-1.8: device not accepting address 15, error -71
[13928.045199] usb 2-1-port8: unable to enumerate USB device

At this point the device is not seen on the USB bus.

The problem appears to be due to some issue within the UAS kernel subsystem which is a newer/faster subsystem to maximise inefficiencies when using USB 3.0 hard disks. Unfortunately, something isn't playing nice which leads to the issues seen above.

The Fix

The fix/workaround is to blacklist and disable UAS for the given USB enclosure.

#/etc/modprobe.d/blacklist-uas.conf
options usb-storage quirks=357d:7788:u

#ensure boot initramfs img is also update with blacklist
$ mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.orig
$ dracut
$ ls -l /boot/initramfs-$(uname -r).img

With the quirk registered, either by reloading module (modprobe -r uas; modprobe -r usb_storage) or rebooting post-dracut, re-attaching the USB enclosure:

[15698.768513] usb 2-1.8: new high-speed USB device number 16 using ehci-pci
[15698.848661] usb 2-1.8: New USB device found, idVendor=357d, idProduct=7788
[15698.848668] usb 2-1.8: New USB device strings: Mfr=10, Product=11, SerialNumber=3
[15698.848672] usb 2-1.8: Product: USB to ATA/ATAPI Bridge
[15698.848676] usb 2-1.8: Manufacturer: JMicron
[15698.848679] usb 2-1.8: SerialNumber: 000012345678
[15698.874203] usb-storage 2-1.5.1.1:1.0: USB Mass Storage device detected
[15698.874316] scsi host6: usb-storage 2-1.5.1.1:1.0
[15698.874429] usb 2-1.8: UAS is blacklisted for this device, using usb-storage instead
[15698.874431] usb-storage 2-1.8:1.0: USB Mass Storage device detected
[15698.874956] usb-storage 2-1.8:1.0: Quirks match for vid 357d pid 7788: 800000
[15698.874992] scsi host7: usb-storage 2-1.8:1.0
[15698.875129] usbcore: registered new interface driver usb-storage
[15698.880025] usbcore: registered new interface driver uas
[15699.925652] scsi 7:0:0:0: Direct-Access Hitachi HTS545050A7E380 0100 PQ: 0 ANSI: 6
[15699.926432] sd 7:0:0:0: Attached scsi generic sg3 type 0
[15699.927219] sd 7:0:0:0: [sdc] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[15699.928202] sd 7:0:0:0: [sdc] Write Protect is off
[15699.928209] sd 7:0:0:0: [sdc] Mode Sense: 67 00 10 08
[15699.929205] sd 7:0:0:0: [sdc] Write cache: enabled, read cache: enabled, supports DPO and FUA
[15699.935909] scsi 6:0:0:0: Direct-Access Generic Ultra HS-SD/MMC 1.82 PQ: 0 ANSI: 0
[15699.936446] sd 6:0:0:0: Attached scsi generic sg4 type 0
[15699.952681] sd 6:0:0:0: [sdd] Attached SCSI removable disk
[15700.036987] sdc: sdc1
[15700.040331] sd 7:0:0:0: [sdc] Attached SCSI disk
[15700.342171] EXT4-fs (sdc1): mounting ext2 file system using the ext4 subsystem
[15700.371376] EXT4-fs (sdc1): mounted filesystem without journal. Opts: (null)

The only downside of this blacklisting means we are using the older USB subsystem which means slower read/writes speeds but probably a small price to pay to save on inconveinience.


Fully working enclosure

$ sudo lsusb -v -d 0080:a001

Bus 001 Device 006: ID 0080:a001  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0080 
  idProduct          0xa001 
  bcdDevice            2.03
  iManufacturer           1 TOSHIBA
  iProduct                2 External USB 3.0
  iSerial                 3 2015033100063
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           85
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       1
      bNumEndpoints           4
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     98 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Command pipe (0x01)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Status pipe (0x02)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Data-in pipe (0x03)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Data-out pipe (0x04)
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength           22
  bNumDeviceCaps          2
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000f0e
      Link Power Management (LPM) Supported
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat          10 micro seconds
    bU2DevExitLat          32 micro seconds
Device Status:     0x0000
  (Bus Powered)


UAS troublesome enclosure

$ sudo lsusb -v -d 357d:7788
Bus 002 Device 016: ID 357d:7788 Sharkoon QuickPort XT
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.10
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x357d Sharkoon
  idProduct          0x7788 QuickPort XT
  bcdDevice            0.00
  iManufacturer          10 JMicron
  iProduct               11 USB to ATA/ATAPI Bridge
  iSerial                 3 000012345678
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           85
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          4 USB Mass Storage
    bmAttributes         0xc0
      Self Powered
    MaxPower               50mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       1
      bNumEndpoints           4
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     98
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Command pipe (0x01)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Status pipe (0x02)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Data-in pipe (0x03)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Data-out pipe (0x04)
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength           22
  bNumDeviceCaps          2
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000002
      HIRD Link Power Management (LPM) Supported
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat          10 micro seconds
    bU2DevExitLat        2047 micro seconds
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered

No comments:

Post a Comment