On 04/26/2015 08:52 PM, James Bottomley wrote: > On Sun, 2015-04-26 at 16:57 +0200, Ondrej Zary wrote: >> On Friday 24 April 2015 13:18:38 Hannes Reinecke wrote: >>> Ancient, and pretty much obsolete by now. >>> >>> Signed-off-by: Hannes Reinecke <hare@xxxxxxx> >>> --- >>> drivers/scsi/advansys.c | 18 ------------------ >>> 1 file changed, 18 deletions(-) >>> >>> diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c >>> index 74e5518..5a55272 100644 >>> --- a/drivers/scsi/advansys.c >>> +++ b/drivers/scsi/advansys.c >>> @@ -11212,24 +11212,6 @@ static int advansys_board_found(struct Scsi_Host >>> *shost, unsigned int iop, } >>> >>> /* >>> - * Following v1.3.89, 'cmd_per_lun' is no longer needed >>> - * and should be set to zero. >>> - * >>> - * But because of a bug introduced in v1.3.89 if the driver is >>> - * compiled as a module and 'cmd_per_lun' is zero, the Mid-Level >>> - * SCSI function 'allocate_device' will panic. To allow the driver >>> - * to work as a module in these kernels set 'cmd_per_lun' to 1. >>> - * >>> - * Note: This is wrong. cmd_per_lun should be set to the depth >>> - * you want on untagged devices always. >>> - #ifdef MODULE >>> - */ >>> - shost->cmd_per_lun = 1; >>> -/* #else >>> - shost->cmd_per_lun = 0; >>> -#endif */ >>> - >>> - /* >>> * Set the maximum number of scatter-gather elements the >>> * adapter can handle. >>> */ >> >> This patch breaks my setup: "modprobe advansys" hangs. >> >> It works when all other patches are applied except this one. > > The specific problem is that a cmd_per_lun of zero breaks everything > because we use it for the initial queue depth and if you don't actually > set it, you get zero (because the template is in static memory). This > should be a global fix that changes the default initial queue depth to 1 > for the probe phase if it's unset in the template or the host. > > Hopefully this should set us up for removing cmd_per_lun. > > James > > --- > > diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c > index 60aae01..681a59a 100644 > --- a/drivers/scsi/scsi_scan.c > +++ b/drivers/scsi/scsi_scan.c > @@ -280,7 +280,8 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, > sdev->host->cmd_per_lun, shost->bqt, > shost->hostt->tag_alloc_policy); > } > - scsi_change_queue_depth(sdev, sdev->host->cmd_per_lun); > + scsi_change_queue_depth(sdev, sdev->host->cmd_per_lun ? > + sdev->host->cmd_per_lun : 1); > > scsi_sysfs_device_initialize(sdev); > > > > That fixes it on my side; tested with two devices on the narrow board and one on the wide board. And while at it I've done a patch to clear up all the now-obsolete cmd_per_lun = 1 settings in the various drivers. James, will you send a formal patch or should I send it, along with the second one to clear up cmd_per_lun? Cheers, Hannes -- Dr. Hannes Reinecke zSeries & Storage hare@xxxxxxx +49 911 74053 688 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton HRB 21284 (AG Nürnberg) -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html