https://bugzilla.kernel.org/show_bug.cgi?id=219652 Bug ID: 219652 Summary: READ CAPACITY(16) not used on large USB-attached drive in recent kernels Product: IO/Storage Version: 2.5 Hardware: All OS: Linux Status: NEW Severity: normal Priority: P3 Component: SCSI Assignee: linux-scsi@xxxxxxxxxxxxxxx Reporter: bugs-a21@xxxxxxxxxxxxxxxx CC: stern@xxxxxxxxxxxxxxxxxxx Regression: Yes Created attachment 307435 --> https://bugzilla.kernel.org/attachment.cgi?id=307435&action=edit diff without stamps of the usbmon output, good (-) to bad (+) Upgrading from old mainline LTS kernel 6.6 to current LTS kernel 6.12, a large 3.00TB SATA drive connected via USB through an "Initio Corporation INIC-1610P SATA bridge" (id 13fd:1e40) is falsely reported as a 2.00TiB capacity drive. According to the dmesg output, the newer kernel fails to identify the need to call read_capacity_16(), resulting in a 32-bit size calculation. I had reported this initially to the linux-usb mailing list. Alan Stern (CC'ed) wrote back, suggesting I redirect to linux-scsi, and include some usbmon traces. To upload the traces, I'm opening this on bugzilla. A few notes: * The USB-to-SATA bridge (via lsusb) is: ID 13fd:1e40 Initio Corporation INIC-1610P SATA bridge * When booting into kernel 6.12.7, the external drive capacity is mis-reported. Booting /back/ into 6.6.68, the capacity continues to be mis-reported. One must now yank the USB cable (or power-cycle) to get the correct size detection again. Here is a diff of the dmesg output when plugging in the drive.