diff options
Diffstat (limited to 'drivers/scsi/sd.c')
-rw-r--r-- | drivers/scsi/sd.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 3f048bd6326d..5a8f55fea5ff 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
@@ -1269,9 +1269,18 @@ repeat: | |||
1269 | 1269 | ||
1270 | /* Some devices return the total number of sectors, not the | 1270 | /* Some devices return the total number of sectors, not the |
1271 | * highest sector number. Make the necessary adjustment. */ | 1271 | * highest sector number. Make the necessary adjustment. */ |
1272 | if (sdp->fix_capacity) | 1272 | if (sdp->fix_capacity) { |
1273 | --sdkp->capacity; | 1273 | --sdkp->capacity; |
1274 | 1274 | ||
1275 | /* Some devices have version which report the correct sizes | ||
1276 | * and others which do not. We guess size according to a heuristic | ||
1277 | * and err on the side of lowering the capacity. */ | ||
1278 | } else { | ||
1279 | if (sdp->guess_capacity) | ||
1280 | if (sdkp->capacity & 0x01) /* odd sizes are odd */ | ||
1281 | --sdkp->capacity; | ||
1282 | } | ||
1283 | |||
1275 | got_data: | 1284 | got_data: |
1276 | if (sector_size == 0) { | 1285 | if (sector_size == 0) { |
1277 | sector_size = 512; | 1286 | sector_size = 512; |