浏览代码

[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>
Jeff Garzik 18 年之前
父节点
当前提交
6c7b7d2b76
共有 1 个文件被更改,包括 3 次插入2 次删除
  1. 3 2
      drivers/ata/libata-scsi.c

+ 3 - 2
drivers/ata/libata-scsi.c

@@ -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;