aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/sd.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/sd.c')
-rw-r--r--drivers/scsi/sd.c49
1 files changed, 10 insertions, 39 deletions
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 5a5457ac9cdb..f52b74cf8d1e 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1275,18 +1275,19 @@ static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
1275 struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk); 1275 struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
1276 struct scsi_device *sdp = sdkp->device; 1276 struct scsi_device *sdp = sdkp->device;
1277 struct Scsi_Host *host = sdp->host; 1277 struct Scsi_Host *host = sdp->host;
1278 sector_t capacity = logical_to_sectors(sdp, sdkp->capacity);
1278 int diskinfo[4]; 1279 int diskinfo[4];
1279 1280
1280 /* default to most commonly used values */ 1281 /* default to most commonly used values */
1281 diskinfo[0] = 0x40; /* 1 << 6 */ 1282 diskinfo[0] = 0x40; /* 1 << 6 */
1282 diskinfo[1] = 0x20; /* 1 << 5 */ 1283 diskinfo[1] = 0x20; /* 1 << 5 */
1283 diskinfo[2] = sdkp->capacity >> 11; 1284 diskinfo[2] = capacity >> 11;
1284 1285
1285 /* override with calculated, extended default, or driver values */ 1286 /* override with calculated, extended default, or driver values */
1286 if (host->hostt->bios_param) 1287 if (host->hostt->bios_param)
1287 host->hostt->bios_param(sdp, bdev, sdkp->capacity, diskinfo); 1288 host->hostt->bios_param(sdp, bdev, capacity, diskinfo);
1288 else 1289 else
1289 scsicam_bios_param(bdev, sdkp->capacity, diskinfo); 1290 scsicam_bios_param(bdev, capacity, diskinfo);
1290 1291
1291 geo->heads = diskinfo[0]; 1292 geo->heads = diskinfo[0];
1292 geo->sectors = diskinfo[1]; 1293 geo->sectors = diskinfo[1];
@@ -2337,14 +2338,6 @@ got_data:
2337 if (sdkp->capacity > 0xffffffff) 2338 if (sdkp->capacity > 0xffffffff)
2338 sdp->use_16_for_rw = 1; 2339 sdp->use_16_for_rw = 1;
2339 2340
2340 /* Rescale capacity to 512-byte units */
2341 if (sector_size == 4096)
2342 sdkp->capacity <<= 3;
2343 else if (sector_size == 2048)
2344 sdkp->capacity <<= 2;
2345 else if (sector_size == 1024)
2346 sdkp->capacity <<= 1;
2347
2348 blk_queue_physical_block_size(sdp->request_queue, 2341 blk_queue_physical_block_size(sdp->request_queue,
2349 sdkp->physical_block_size); 2342 sdkp->physical_block_size);
2350 sdkp->device->sector_size = sector_size; 2343 sdkp->device->sector_size = sector_size;
@@ -2795,28 +2788,6 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
2795 sdkp->ws10 = 1; 2788 sdkp->ws10 = 1;
2796} 2789}
2797 2790
2798static int sd_try_extended_inquiry(struct scsi_device *sdp)
2799{
2800 /* Attempt VPD inquiry if the device blacklist explicitly calls
2801 * for it.
2802 */
2803 if (sdp->try_vpd_pages)
2804 return 1;
2805 /*
2806 * Although VPD inquiries can go to SCSI-2 type devices,
2807 * some USB ones crash on receiving them, and the pages
2808 * we currently ask for are for SPC-3 and beyond
2809 */
2810 if (sdp->scsi_level > SCSI_SPC_2 && !sdp->skip_vpd_pages)
2811 return 1;
2812 return 0;
2813}
2814
2815static inline u32 logical_to_sectors(struct scsi_device *sdev, u32 blocks)
2816{
2817 return blocks << (ilog2(sdev->sector_size) - 9);
2818}
2819
2820/** 2791/**
2821 * sd_revalidate_disk - called the first time a new disk is seen, 2792 * sd_revalidate_disk - called the first time a new disk is seen,
2822 * performs disk spin up, read_capacity, etc. 2793 * performs disk spin up, read_capacity, etc.
@@ -2856,7 +2827,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
2856 if (sdkp->media_present) { 2827 if (sdkp->media_present) {
2857 sd_read_capacity(sdkp, buffer); 2828 sd_read_capacity(sdkp, buffer);
2858 2829
2859 if (sd_try_extended_inquiry(sdp)) { 2830 if (scsi_device_supports_vpd(sdp)) {
2860 sd_read_block_provisioning(sdkp); 2831 sd_read_block_provisioning(sdkp);
2861 sd_read_block_limits(sdkp); 2832 sd_read_block_limits(sdkp);
2862 sd_read_block_characteristics(sdkp); 2833 sd_read_block_characteristics(sdkp);
@@ -2891,7 +2862,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
2891 if (sdkp->opt_xfer_blocks && 2862 if (sdkp->opt_xfer_blocks &&
2892 sdkp->opt_xfer_blocks <= dev_max && 2863 sdkp->opt_xfer_blocks <= dev_max &&
2893 sdkp->opt_xfer_blocks <= SD_DEF_XFER_BLOCKS && 2864 sdkp->opt_xfer_blocks <= SD_DEF_XFER_BLOCKS &&
2894 sdkp->opt_xfer_blocks * sdp->sector_size >= PAGE_CACHE_SIZE) 2865 sdkp->opt_xfer_blocks * sdp->sector_size >= PAGE_SIZE)
2895 rw_max = q->limits.io_opt = 2866 rw_max = q->limits.io_opt =
2896 sdkp->opt_xfer_blocks * sdp->sector_size; 2867 sdkp->opt_xfer_blocks * sdp->sector_size;
2897 else 2868 else
@@ -2900,7 +2871,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
2900 /* Combine with controller limits */ 2871 /* Combine with controller limits */
2901 q->limits.max_sectors = min(rw_max, queue_max_hw_sectors(q)); 2872 q->limits.max_sectors = min(rw_max, queue_max_hw_sectors(q));
2902 2873
2903 set_capacity(disk, sdkp->capacity); 2874 set_capacity(disk, logical_to_sectors(sdp, sdkp->capacity));
2904 sd_config_write_same(sdkp); 2875 sd_config_write_same(sdkp);
2905 kfree(buffer); 2876 kfree(buffer);
2906 2877