Commit e494f633 authored by Linus Torvalds's avatar Linus Torvalds
parents 3bd19078 0c144d0d
...@@ -1176,8 +1176,12 @@ unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf, ...@@ -1176,8 +1176,12 @@ unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf,
n_sectors = ata_id_u32(args->id, 60); n_sectors = ata_id_u32(args->id, 60);
n_sectors--; /* ATA TotalUserSectors - 1 */ n_sectors--; /* ATA TotalUserSectors - 1 */
tmp = n_sectors; /* note: truncates, if lba48 */
if (args->cmd->cmnd[0] == READ_CAPACITY) { if (args->cmd->cmnd[0] == READ_CAPACITY) {
if( n_sectors >= 0xffffffffULL )
tmp = 0xffffffff ; /* Return max count on overflow */
else
tmp = n_sectors ;
/* sector count, 32-bit */ /* sector count, 32-bit */
rbuf[0] = tmp >> (8 * 3); rbuf[0] = tmp >> (8 * 3);
rbuf[1] = tmp >> (8 * 2); rbuf[1] = tmp >> (8 * 2);
...@@ -1191,10 +1195,12 @@ unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf, ...@@ -1191,10 +1195,12 @@ unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf,
} else { } else {
/* sector count, 64-bit */ /* sector count, 64-bit */
rbuf[2] = n_sectors >> (8 * 7); tmp = n_sectors >> (8 * 4);
rbuf[3] = n_sectors >> (8 * 6); rbuf[2] = tmp >> (8 * 3);
rbuf[4] = n_sectors >> (8 * 5); rbuf[3] = tmp >> (8 * 2);
rbuf[5] = n_sectors >> (8 * 4); rbuf[4] = tmp >> (8 * 1);
rbuf[5] = tmp;
tmp = n_sectors;
rbuf[6] = tmp >> (8 * 3); rbuf[6] = tmp >> (8 * 3);
rbuf[7] = tmp >> (8 * 2); rbuf[7] = tmp >> (8 * 2);
rbuf[8] = tmp >> (8 * 1); rbuf[8] = tmp >> (8 * 1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment