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
Signed-off-by: Brian King <brking@xxxxxxxxxx> --- 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); _