On 1/1/25 6:57 PM, bugzilla-daemon@xxxxxxxxxx wrote: > * 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. That part is really strange. I wonder if the new code is not resetting the device and the old code was somehow. > > Here is a diff of the dmesg output when plugging in the drive. > From (-) is kernel 6.1.122 > To (+) is kernel 6.12.7: > scsi host12: usb-storage 1-13:1.0 > scsi 12:0:0:0: Direct-Access TOSHIBA DT01ACA300 3.00 PQ: 0 ANSI: 4 > sd 12:0:0:0: Attached scsi generic sg1 type 0 > -sd 12:0:0:0: [sdb] Very big device. Trying to use READ CAPACITY(16). > -sd 12:0:0:0: [sdb] 5860533167 512-byte logical blocks: (3.00 TB/2.73 TiB) > +sd 12:0:0:0: [sdb] 4294967295 512-byte logical blocks: (2.20 TB/2.00 TiB) > sd 12:0:0:0: [sdb] Write Protect is off > sd 12:0:0:0: [sdb] Mode Sense: 23 00 00 00 > sd 12:0:0:0: [sdb] No Caching mode page found > sd 12:0:0:0: [sdb] Assuming drive cache: write through > -sd 12:0:0:0: [sdb] Very big device. Trying to use READ CAPACITY(16). > - sdb: sdb1 > sd 12:0:0:0: [sdb] Attached SCSI disk > > I am attaching a diff of the usbmon output for the earlier kernel (good) and > current kernel (bad), Just to start can you tell me what the device is returning? We hit that "Very big device" code path if the device returns a size of 0xffffffff or larger so with the old code we at some point returned a large size. With the new code the device returns only 0xfffffffe (4294967294) (read_capacity_10 does a lba that we got from the device + 1 so you see 4294967295 in the log message) so we never hit that very bit device code path and try READ CAPACITY(16). I might have changed some behavior during the retries that causes us to not get the right size now. However, I couldn't fully understand the output of the usbmon traces. Can you tell me when we do the READ CAPACITY (10) what the device is returning? Is it returning a sense error like UNIT_ATTENTION a couple times and when it returns success what's in the data buffer?