Re: aic7xxx support for >2TB volumes?

Douglas Gilbert
2005-11-19T01:31:12Z

Here are the test results for that patch. They indicate
that the READ_CAPACITY(16) is getting to the disk (which
doesn't support it since its capacity is 18 GB).

# sg_readcap -16 -vv /dev/sdb
read capacity (16) cdb: 9e 10 00 00 00 00 00 00 00 00 00 00 00 20 00 00
READ CAPACITY 16 command error: SCSI status: Check Condition
Fixed format, current; Sense key: Illegal Request
Additional sense: Invalid command operation code
Field replaceable unit code: 2
Sense Key Specific: Error in Command byte 0 bit 7
Raw sense data (in hex):
70 00 05 00 00 00 00 0a 00 00 00 00 20 00 02 cf
00 00
plus...: Driver_status=0x08 [DRIVER_SENSE, SUGGEST_OK]
READ CAPACITY (16) not supported

# lsscsi
[0:0:0:0] disk SEAGATE ST318451LW 0003 /dev/sdb
[3:0:0:0] disk ATA ST380013AS 3.18 /dev/sda

# lsscsi -H
[0] aic7xxx
[1] sym53c8xx
[2] sym53c8xx
[3] sata_sil

# lspci
....
00:0e.0 RAID bus controller: CMD Technology Inc Silicon Image SiI 3112 SATARaid Controller (rev 02)
00:0f.0 SCSI storage controller: Adaptec AIC-7892A U160/m (rev 02)
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1010 Ultra3 SCSI Adapter (rev 01)
00:10.1 SCSI storage controller: LSI Logic / Symbios Logic 53c1010 Ultra3 SCSI Adapter (rev 01)

BTW That adaptec controller is labelled "APD-29160N MAC".
My PC BIOS doesn't see it, so I can't boot of it, but
linux sees it ok. That makes it useful for testing ...

Doug Gilbert

Douglas Gilbert wrote:
> Brian King wrote:
>
>>Kilian CAVALOTTI wrote:
>>
>>
>>
>>>What I can't really understand is how a device could fail on a READ CAPACITY
>>>16 if plugged on an HBA, but work if plugged on another one...
>>
>>
>>Looks to me like the aic7xxx driver does not change max_cmd_len from
>>the default of 12, so any 16 byte cdb gets failed back by scsi core.
>
>
> Indeed, the DID_ABORT on the READ CAPACITY(16) suggests
> that the command is not making it out to the scsi bus.
> Strange that in lk 2.6 the scsi subsystem still defaults
> to a maximum of 12 byte scsi commands, unless overridden
> by the LLD.
>
> Perhaps Kilian could try the following patch (borrowed from
> scsi_debug). The patch is against lk 2.6.15-rc1 but should
> by widely applicable (unless the aic7... series really
> does have a 12 byte limit). I will report back if this
> patch has any adverse impact on "sg_readcap -16" which
> should report: "illegal request/invalid command operation
> code" on my hardware.
>
> Doug Gilbert
>
>
>
>
> ------------------------------------------------------------------------
>
> --- linux/drivers/scsi/aic7xxx/aic7xxx_osm.c 2005-11-15 13:15:26.000000000 +1000
> +++ linux/drivers/scsi/aic7xxx/aic7xxx_osm.c2615rc1big 2005-11-19 08:45:08.000000000 +1000
> @@ -637,6 +637,9 @@
> if (bootverbose)
> sdev_printk(KERN_INFO, sdev, "Slave Configure\n");
>
> + if (sdev->host->max_cmd_len < MAX_COMMAND_SIZE)
> + sdev->host->max_cmd_len = MAX_COMMAND_SIZE;
> +
> ahc_linux_device_queue_depth(sdev);
>
> /* Initial Domain Validation */
> --- linux/drivers/scsi/aic7xxx/aic79xx_osm.c 2005-11-15 13:15:26.000000000 +1000
> +++ linux/drivers/scsi/aic7xxx/aic79xx_osm.c2615rc1big 2005-11-19 08:45:29.000000000 +1000
> @@ -559,6 +559,9 @@
> if (bootverbose)
> sdev_printk(KERN_INFO, sdev, "Slave Configure\n");
>
> + if (sdev->host->max_cmd_len < MAX_COMMAND_SIZE)
> + sdev->host->max_cmd_len = MAX_COMMAND_SIZE;
> +
> ahd_linux_device_queue_depth(sdev);
>
> /* Initial Domain Validation */