From: Jeff Garzik Date: Mon, 29 Aug 2005 20:12:36 +0000 (-0400) Subject: /spare/repo/libata-dev branch 'v2.6.13' X-Git-Tag: v2.6.15-rc1~736^2~23^2~6 X-Git-Url: http://www.pilppa.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=2fca877b68b2b4fc5b94277858a1bedd46017cde;p=linux-2.6-omap-h63xx.git /spare/repo/libata-dev branch 'v2.6.13' --- 2fca877b68b2b4fc5b94277858a1bedd46017cde diff --cc drivers/scsi/libata-scsi.c index 5367c10e4db,6a75ec2187f..954d1bca3b2 --- a/drivers/scsi/libata-scsi.c +++ b/drivers/scsi/libata-scsi.c @@@ -1234,24 -1171,18 +1235,28 @@@ unsigned int ata_scsiop_read_cap(struc VPRINTK("ENTER\n"); - if (ata_id_has_lba48(args->id)) - n_sectors = ata_id_u64(args->id, 100); - else - n_sectors = ata_id_u32(args->id, 60); + if (ata_id_has_lba(args->id)) { + if (ata_id_has_lba48(args->id)) + n_sectors = ata_id_u64(args->id, 100); + else + n_sectors = ata_id_u32(args->id, 60); + } else { + /* CHS default translation */ + n_sectors = args->id[1] * args->id[3] * args->id[6]; + + if (ata_id_current_chs_valid(args->id)) + /* CHS current translation */ + n_sectors = ata_id_u32(args->id, 57); + } + n_sectors--; /* ATA TotalUserSectors - 1 */ - tmp = n_sectors; /* note: truncates, if lba48 */ 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 */ rbuf[0] = tmp >> (8 * 3); rbuf[1] = tmp >> (8 * 2);