Re: aic7xxx support for >2TB volumes?

Brian King
2005-11-21T04:54:03Z

[-- Attachment #1: Type: text/plain, Size: 607 bytes --]

Douglas Gilbert wrote:
> 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.

I don't think slave_configure is the right place to be modifying
a scsi_host attribute. How about this patch instead? Only compile
tested.

--
Brian King
eServer Storage I/O
IBM Linux Technology Center

[-- Attachment #2: aic7xxx_max_cmd_len.patch --]
[-- Type: text/x-patch, Size: 2603 bytes --]

Signed-off-by: Brian King <brking@us.ibm.com>
---

drivers/scsi/aic7xxx/aic79xx.h | 2 ++
drivers/scsi/aic7xxx/aic79xx_osm.c | 1 +
drivers/scsi/aic7xxx/aic7xxx.h | 2 ++
drivers/scsi/aic7xxx/aic7xxx_osm.c | 1 +
4 files changed, 6 insertions(+)

diff -puN drivers/scsi/aic7xxx/aic79xx.h~aic7xxx_max_cmd_len drivers/scsi/aic7xxx/aic79xx.h
--- linux-2.6/drivers/scsi/aic7xxx/aic79xx.h~aic7xxx_max_cmd_len 2005-11-20 22:22:28.000000000 -0600
+++ linux-2.6-bjking1/drivers/scsi/aic7xxx/aic79xx.h 2005-11-20 22:22:28.000000000 -0600
@@ -201,6 +201,8 @@ do { \
/* Reset line assertion time in us */
#define AHD_BUSRESET_DELAY 25

+#define AHD_MAX_CMD_LEN 16
+
/******************* Chip Characteristics/Operating Settings *****************/
/*
* Chip Type
diff -puN drivers/scsi/aic7xxx/aic79xx_osm.c~aic7xxx_max_cmd_len drivers/scsi/aic7xxx/aic79xx_osm.c
--- linux-2.6/drivers/scsi/aic7xxx/aic79xx_osm.c~aic7xxx_max_cmd_len 2005-11-20 22:22:28.000000000 -0600
+++ linux-2.6-bjking1/drivers/scsi/aic7xxx/aic79xx_osm.c 2005-11-20 22:22:28.000000000 -0600
@@ -1081,6 +1081,7 @@ ahd_linux_register_host(struct ahd_softc
host->max_id = (ahd->features & AHD_WIDE) ? 16 : 8;
host->max_lun = AHD_NUM_LUNS;
host->max_channel = 0;
+ host->max_cmd_len = AHD_MAX_CMD_LEN;
host->sg_tablesize = AHD_NSEG;
ahd_set_unit(ahd, ahd_linux_unit++);
sprintf(buf, "scsi%d", host->host_no);
diff -puN drivers/scsi/aic7xxx/aic7xxx.h~aic7xxx_max_cmd_len drivers/scsi/aic7xxx/aic7xxx.h
--- linux-2.6/drivers/scsi/aic7xxx/aic7xxx.h~aic7xxx_max_cmd_len 2005-11-20 22:22:28.000000000 -0600
+++ linux-2.6-bjking1/drivers/scsi/aic7xxx/aic7xxx.h 2005-11-20 22:22:28.000000000 -0600
@@ -181,6 +181,8 @@ struct seeprom_descriptor;
/* Reset line assertion time in us */
#define AHC_BUSRESET_DELAY 25

+#define AHC_MAX_CMD_LEN 16
+
/******************* Chip Characteristics/Operating Settings *****************/
/*
* Chip Type
diff -puN drivers/scsi/aic7xxx/aic7xxx_osm.c~aic7xxx_max_cmd_len drivers/scsi/aic7xxx/aic7xxx_osm.c
--- linux-2.6/drivers/scsi/aic7xxx/aic7xxx_osm.c~aic7xxx_max_cmd_len 2005-11-20 22:22:28.000000000 -0600
+++ linux-2.6-bjking1/drivers/scsi/aic7xxx/aic7xxx_osm.c 2005-11-20 22:22:28.000000000 -0600
@@ -1082,6 +1082,7 @@ ahc_linux_register_host(struct ahc_softc
host->max_id = (ahc->features & AHC_WIDE) ? 16 : 8;
host->max_lun = AHC_NUM_LUNS;
host->max_channel = (ahc->features & AHC_TWIN) ? 1 : 0;
+ host->max_cmd_len = AHC_MAX_CMD_LEN;
host->sg_tablesize = AHC_NSEG;
ahc_set_unit(ahc, ahc_linux_unit++);
sprintf(buf, "scsi%d", host->host_no);
_