Ignore:
Timestamp:
Apr 21, 2017, 4:28:29 AM (5 weeks ago)
Author:
brainslayer
Message:

update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-4.9/drivers/scsi/sd.c

    r31574 r31885  
    20582058#define READ_CAPACITY_RETRIES_ON_RESET  10
    20592059
     2060/*
     2061 * Ensure that we don't overflow sector_t when CONFIG_LBDAF is not set
     2062 * and the reported logical block size is bigger than 512 bytes. Note
     2063 * that last_sector is a u64 and therefore logical_to_sectors() is not
     2064 * applicable.
     2065 */
     2066static bool sd_addressable_capacity(u64 lba, unsigned int sector_size)
     2067{
     2068        u64 last_sector = (lba + 1ULL) << (ilog2(sector_size) - 9);
     2069
     2070        if (sizeof(sector_t) == 4 && last_sector > U32_MAX)
     2071                return false;
     2072
     2073        return true;
     2074}
     2075
    20602076static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp,
    20612077                                                unsigned char *buffer)
     
    21232139        }
    21242140
    2125         if ((sizeof(sdkp->capacity) == 4) && (lba >= 0xffffffffULL)) {
     2141        if (!sd_addressable_capacity(lba, sector_size)) {
    21262142                sd_printk(KERN_ERR, sdkp, "Too big for this kernel. Use a "
    21272143                        "kernel compiled with support for large block "
     
    22092225        }
    22102226
    2211         if ((sizeof(sdkp->capacity) == 4) && (lba == 0xffffffff)) {
     2227        if (!sd_addressable_capacity(lba, sector_size)) {
    22122228                sd_printk(KERN_ERR, sdkp, "Too big for this kernel. Use a "
    22132229                        "kernel compiled with support for large block "
     
    28782894                rw_max = logical_to_sectors(sdp, sdkp->opt_xfer_blocks);
    28792895        } else
    2880                 rw_max = BLK_DEF_MAX_SECTORS;
     2896                rw_max = min_not_zero(logical_to_sectors(sdp, dev_max),
     2897                                      (sector_t)BLK_DEF_MAX_SECTORS);
    28812898
    28822899        /* Combine with controller limits */
Note: See TracChangeset for help on using the changeset viewer.