How to fix "device not accepting address" error

If Linux suddenly happen to fail to recognize a USB drive, check dmesg for errors. Once you see a bunch of errors like

usb 1-5: device descriptor read/64, error -32  
usb 1-5: new high speed USB device using ehci_hcd and address 21  
usb 1-5: device not accepting address 21, error -32

most probably it’s a result of hardware failure rather than a driver or kernel bug. USB has an over-current protection, which gets triggered when power consumption from the port is too high.

Unplug all USB devices from PC, turn power off, and wait a minute or two. Plug everything back and boot into Linux.

I spent the whole morning, until found out why. I hope that this message will save someone a few hours, and nerves.

PS: Actual errors may vary. You may see different port and/or error code. Ex.:

usb 3-1: device descriptor read/64, error -62

or

usb 4-2: device descriptor read/64, error -71

or

usb 2-3: device descriptor read/64, error -101

but the root of the problem is the same.