Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (141 commits) USB: mct_u232: fix broken close USB: gadget: amd5536udc.c: fix error path USB: imx21-hcd - fix off by one resource size calculation usb: gadget: fix Kconfig warning usb: r8a66597-udc: Add processing when USB was removed. mxc_udc: add workaround for ENGcm09152 for i.MX35 USB: ftdi_sio: add device ids for ScienceScope USB: musb: AM35x: Workaround for fifo read issue USB: musb: add musb support for AM35x USB: AM35x: Add musb support usb: Fix linker errors with CONFIG_PM=n USB: ohci-sh - use resource_size instead of defining its own resource_len macro USB: isp1362-hcd - use resource_size instead of defining its own resource_len macro USB: isp116x-hcd - use resource_size instead of defining its own resource_len macro USB: xhci: Fix compile error when CONFIG_PM=n USB: accept some invalid ep0-maxpacket values USB: xHCI: PCI power management implementation USB: xHCI: bus power management implementation USB: xHCI: port remote wakeup implementation USB: xHCI: port power management implementation ... Manually fix up (non-data) conflict: the SCSI merge gad renamed the 'hw_sector_size' member to 'physical_block_size', and the USB tree brought a new use of it.
This commit is contained in:
@@ -1498,6 +1498,9 @@ static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp,
|
||||
unsigned long long lba;
|
||||
unsigned sector_size;
|
||||
|
||||
if (sdp->no_read_capacity_16)
|
||||
return -EINVAL;
|
||||
|
||||
do {
|
||||
memset(cmd, 0, 16);
|
||||
cmd[0] = SERVICE_ACTION_IN;
|
||||
@@ -1626,6 +1629,15 @@ static int read_capacity_10(struct scsi_disk *sdkp, struct scsi_device *sdp,
|
||||
sector_size = get_unaligned_be32(&buffer[4]);
|
||||
lba = get_unaligned_be32(&buffer[0]);
|
||||
|
||||
if (sdp->no_read_capacity_16 && (lba == 0xffffffff)) {
|
||||
/* Some buggy (usb cardreader) devices return an lba of
|
||||
0xffffffff when the want to report a size of 0 (with
|
||||
which they really mean no media is present) */
|
||||
sdkp->capacity = 0;
|
||||
sdkp->physical_block_size = sector_size;
|
||||
return sector_size;
|
||||
}
|
||||
|
||||
if ((sizeof(sdkp->capacity) == 4) && (lba == 0xffffffff)) {
|
||||
sd_printk(KERN_ERR, sdkp, "Too big for this kernel. Use a "
|
||||
"kernel compiled with support for large block "
|
||||
|
Reference in New Issue
Block a user