ASM107x is notoriously flaky. That said, surprise disconnects must be handled and the upper layers are to blame here. The lower layer did return a NO_CONNECT which just means that the device is gone and the upper layer's error handling is faulty. It may be that the device wasn't removed and the lower layer shouldn't have claimed so, but it obviously can happen at any time.