From: Jeff Garzik Date: Tue, 17 Jan 2006 15:26:28 +0000 (-0500) Subject: Merge branch 'upstream' X-Git-Tag: v2.6.17-rc1~1182^2~130^2 X-Git-Url: http://git.rot13.org/?a=commitdiff_plain;h=0825788ff27c7145e9d558cb2a26f3837d1f9be5;p=powerpc.git Merge branch 'upstream' --- 0825788ff27c7145e9d558cb2a26f3837d1f9be5 diff --cc drivers/scsi/libata-scsi.c index 094c9c88a0,cfbceb5047..0e65bfe92e --- a/drivers/scsi/libata-scsi.c +++ b/drivers/scsi/libata-scsi.c @@@ -1132,11 -1152,18 +1152,12 @@@ static unsigned int ata_scsi_rw_xlat(st tf->hob_lbah = (block >> 40) & 0xff; tf->hob_lbam = (block >> 32) & 0xff; tf->hob_lbal = (block >> 24) & 0xff; - } else { - /* use LBA28 */ - - /* The request -may- be too large for LBA28. */ - if ((block >> 28) || (n_block > 256)) - goto out_of_range; - - tf->device |= (block >> 24) & 0xf; - } + } else + /* request too large even for LBA48 */ + goto out_of_range; - ata_rwcmd_protocol(qc); + if (unlikely(ata_rwcmd_protocol(qc) < 0)) + goto invalid_fld; qc->nsect = n_block; tf->nsect = n_block & 0xff; @@@ -1151,10 -1178,11 +1172,11 @@@ u32 sect, head, cyl, track; /* The request -may- be too large for CHS addressing. */ - if ((block >> 28) || (n_block > 256)) + if (!lba_28_ok(block, n_block)) goto out_of_range; - ata_rwcmd_protocol(qc); + if (unlikely(ata_rwcmd_protocol(qc) < 0)) + goto invalid_fld; /* Convert LBA to CHS */ track = (u32)block / dev->sectors;