[libata] Fix decoding of 6-byte commands
The code for parsing 6-byte SCSI command LBAs missed the top 5 bits (the MSB). Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
ddfc87a098
commit
6c7b7d2b76
1 changed files with 3 additions and 2 deletions
|
@ -1050,14 +1050,15 @@ static unsigned int ata_scsi_flush_xlat(struct ata_queued_cmd *qc)
|
||||||
static void scsi_6_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
|
static void scsi_6_lba_len(const u8 *cdb, u64 *plba, u32 *plen)
|
||||||
{
|
{
|
||||||
u64 lba = 0;
|
u64 lba = 0;
|
||||||
u32 len = 0;
|
u32 len;
|
||||||
|
|
||||||
VPRINTK("six-byte command\n");
|
VPRINTK("six-byte command\n");
|
||||||
|
|
||||||
|
lba |= ((u64)(cdb[1] & 0x1f)) << 16;
|
||||||
lba |= ((u64)cdb[2]) << 8;
|
lba |= ((u64)cdb[2]) << 8;
|
||||||
lba |= ((u64)cdb[3]);
|
lba |= ((u64)cdb[3]);
|
||||||
|
|
||||||
len |= ((u32)cdb[4]);
|
len = cdb[4];
|
||||||
|
|
||||||
*plba = lba;
|
*plba = lba;
|
||||||
*plen = len;
|
*plen = len;
|
||||||
|
|
Loading…
Add table
Reference in a new issue