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

update

File:
1 edited

Legend:

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

    r31632 r31885  
    20522052#define READ_CAPACITY_RETRIES_ON_RESET  10
    20532053
     2054/*
     2055 * Ensure that we don't overflow sector_t when CONFIG_LBDAF is not set
     2056 * and the reported logical block size is bigger than 512 bytes. Note
     2057 * that last_sector is a u64 and therefore logical_to_sectors() is not
     2058 * applicable.
     2059 */
     2060static bool sd_addressable_capacity(u64 lba, unsigned int sector_size)
     2061{
     2062        u64 last_sector = (lba + 1ULL) << (ilog2(sector_size) - 9);
     2063
     2064        if (sizeof(sector_t) == 4 && last_sector > U32_MAX)
     2065                return false;
     2066
     2067        return true;
     2068}
     2069
    20542070static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp,
    20552071                                                unsigned char *buffer)
     
    21172133        }
    21182134
    2119         if ((sizeof(sdkp->capacity) == 4) && (lba >= 0xffffffffULL)) {
     2135        if (!sd_addressable_capacity(lba, sector_size)) {
    21202136                sd_printk(KERN_ERR, sdkp, "Too big for this kernel. Use a "
    21212137                        "kernel compiled with support for large block "
     
    22032219        }
    22042220
    2205         if ((sizeof(sdkp->capacity) == 4) && (lba == 0xffffffff)) {
     2221        if (!sd_addressable_capacity(lba, sector_size)) {
    22062222                sd_printk(KERN_ERR, sdkp, "Too big for this kernel. Use a "
    22072223                        "kernel compiled with support for large block "
     
    28892905                rw_max = logical_to_sectors(sdp, sdkp->opt_xfer_blocks);
    28902906        } else
    2891                 rw_max = BLK_DEF_MAX_SECTORS;
     2907                rw_max = min_not_zero(logical_to_sectors(sdp, dev_max),
     2908                                      (sector_t)BLK_DEF_MAX_SECTORS);
    28922909
    28932910        /* Combine with controller limits */
Note: See TracChangeset for help on using the changeset viewer.