Re: MT7601U with on-board storage reports incorrect capacity

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 09/01/2025 17:34, Alan Stern wrote:
> On Thu, Jan 09, 2025 at 04:02:58PM +0200, Bitterblue Smith wrote:
>> Hi,
>>
>> I have this wifi device with on-board storage for the Windows driver:
>>
>> New USB device found, idVendor=148f, idProduct=2878, bcdDevice= 0.01
>>
>> After switching to wifi mode, we can see it's a MT7601U:
>>
>> New USB device found, idVendor=148f, idProduct=7601, bcdDevice= 0.00
>>
>> The problem with this one is that it can't be mounted, nothing happens
>> for a long time. I'm testing with kernel 6.12.8-arch1-1 but it's been
>> like this for at least two years. 
>>
>> The problem seems to be that reading from the "end" of the device
>> takes 17 seconds. I assume the reason for that is the fake capacity:
>>
>> SCSI Payload (Read Capacity(10) Response Data)
>>     [LUN: 0x0000]
>>     [Command Set:CD-ROM (0x05) ]
>>     [MMC Opcode: Read Capacity(10) (0x25)]
>>     [Request in: 212]
>>     [Response in: 217]
>>     LBA: 65280 
>>     Block size in bytes: 2048
>>     Read capacity: 133693440 bytes (127.50 MiB)
>>
>> The real capacity is probably just 8 MiB. The driver files stored in
>> it are ~7 MiB total.
>>
>> This takes 17 seconds and returns 4096 bytes filled with 0xff:
>>
>> SCSI CDB Read(10)
>>     [LUN: 0x0000]
>>     [Command Set:CD-ROM (0x05) ]
>>     [Response in: 565]
>>     Opcode: Read(10) (0x28)
>>     Flags: 0x00
>>     Logical Block Address (LBA): 0x0000fefc (65276)
>>     ...0 0000 = Group: 0x00
>>     Transfer Length: 2
>>     Control: 0x00
>>
>> Windows never tries to read that far. (The device works in Windows.)
>>
>> How can this be fixed?
> 
> Upgrade the WiFi device's firmware.  If you can convince the vendor to 
> fix the bug, which seems unlikely because it works okay with Windows.
> 
> Part of the partition probing (which tries to read the device's last 
> sector) is done by various userspace programs.  But I think some of it 
> is also done by the kernel, and as far as I know the only way to prevent 
> it is to build a kernel without support for the partition schemes which 
> store some of their data near the end of the device.
> 
> Probably your best approach is to tell usb-storage to ignore the device 
> completely.  You can do this with a suitable module parameter for the 
> usb-storage driver.  For example, add:
> 
> 	usb-storage.quirks=148f:7601:i
> 
> on the kernel's boot command line (or put a similar entry in an 
> /etc/modprobe.d/*.conf file if usb-storage is a loadable kernel module 
> on your system).  Of course, then you wouldn't be able to mount the 
> device or access the Windows driver files on it, but I imagine you don't 
> care about them very much while you're running Linux.
> 
>> usb_modeswitch can switch it to wifi mode, so it's not a huge problem.
>> I'm just curious.
> 
> If you really wanted, you could create a custom kernel which which 
> adjust the storage capacity of this particular device down to 8 MB.  But 
> you would never be able to convince anyone to include such a workaround 
> in the main kernel.
> 
> Alan Stern

Haha, so it's hopeless. Thank you for the detailed explanation.




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux